AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Seltsames Phänomen: Unterschied zwischen Integer und Int64
Thema durchsuchen
Ansicht
Themen-Optionen

Seltsames Phänomen: Unterschied zwischen Integer und Int64

Ein Thema von hschmid67 · begonnen am 9. Jan 2021 · letzter Beitrag vom 9. Jan 2021
 
hschmid67

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

Seltsames Phänomen: Unterschied zwischen Integer und Int64

  Alt 9. Jan 2021, 09: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 13:01 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz