Hallo zusammen,
ich habe die letzten Stunden mit einem mir unverständlichen Phänomen verbracht. Es wäre schön, wenn jemand mir das erklären könnte:
Ich hab eine sehr einfache Beispielklasse mit einem Fluent-Interface. Sie soll in diesem Beispiel einfach nur ein Objekt erzeugen, eine lokale Variable (über var- oder out-Parameter) setzen und mit dieser lokalen Variablen soll dann eine Objektvariable verändert werden. Danach wird der Inhalt der Objektvariablen in einer Messagebox ausgegeben.
Delphi-Quellcode:
unit uTest;
type
TTest =
class
private
FInt: Int64;
public
function SetTo2(
var mValue: Int64): TTest;
function SetI(mValue: Int64): TTest;
procedure WriteInt;
end;
implementation
uses
System.SysUtils,
Vcl.Dialogs;
function TTest.SetTo2(
var mValue: Int64): TTest;
begin
Result := Self;
mValue := 2;
end;
function TTest.SetI(mValue: Int64): TTest;
begin
Result := Self;
FInt := mValue;
end;
procedure TTest.WriteInt;
begin
ShowMessage(FInt.ToString);
end;
end.
Wenn ich das ganze dann so aufrufe:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
lCount: Int64;
lTest: TTest;
begin
lTest := TTest.Create;
try
lTest.SetTo2(lCount).SetI(lCount + 1).WriteInt;
finally
lTest.Free;
end;
end;
erhalte ich folgende Ausgabe:
wobei ich ja eigentlich einfach nur eine "3" sehen wollte. Warum funktioniert das nicht??? Ach ja: Wenn ich überall statt des "Int64" ein "Integer" schreibe, dann funktioniert es wie gewollt.
Was habe ich da nicht verstanden? Ich dachte, "Int64" ist einfach die 64-Bit-Variante von einem "Integer" - und ansonsten identisch. Hängt das mit meinem verwendeten Windows10 64-Bit zusammen?
Es muss aber wohl mit dem Fluent-Interface zusammenhängen, denn so funktioniert es auch mit Int64 problemlos:
Delphi-Quellcode:
lTest.SetTo2(lCount);
lTest.SetI(lCount + 1);
lTest.WriteInt;
Herzliche Grüße
Harald