Einzelnen Beitrag anzeigen

hschmid67

Registriert seit: 2. Jul 2012
Ort: Weilheim i. Obb.
71 Beiträge
 
Delphi 12 Athens
 
#1

Seltsames Phänomen: Unterschied zwischen Integer und Int64

  Alt 9. Jan 2021, 10:01
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:

Code:
18159907708203893
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
Harald Schmid

Geändert von hschmid67 ( 9. Jan 2021 um 14:01 Uhr)
  Mit Zitat antworten Zitat