Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#19

AW: Unterschied zwischen (var AFileStream: TFileStream) und (AFileStream: TFileStream

  Alt 14. Mai 2014, 11:38
@OlafSt

Wenn ich dir meinen Schlüssel zu meiner Wohnung gebe, dann kannst du in die Wohnung rein und dort umräumen.
Tauscht du den Schlüssel nun aus und gibts mir diesen zurück, komme ich nicht mehr in meine Wohnung.
procedure Foo( var AKey : TWohnung ); Gebe ich dir eine Kopie meines Schlüssels, dann kannst du immer noch in die Wohnung rein und umräumen.
Da ich aber keinen Schlüssel von dir zurücknehme, kann ich trotzdem noch mit meinem Schlüssel in meine Wohnung (und sehe dann entweder Chaos oder endlich mal eine aufgeräumte Wohnung)
procedure Foo( AKey : TWohnung );
In deinem Beispiel wird aber die Wohnung übergeben und dicht der Schlüssel
Ein absolutes, definitives und ultimatives NEIN!

Es wird eben nicht die Instanz übergeben, sondern eine Referenz/Zeiger/Pointer (wie auch immer du das definieren willst) auf die Instanz.

Wenn ich an der Kopie des Schlüssels etwas ändere (Eigenschaft: Farbe, oder Form), dann ist bei procedure Foo( AKey : TKey ); dann ist doch auch der Original-Schlüssel geändert, richtig?
Es wird nicht der Schlüssel (Referenz/Zeiger/Pointer) geändert, sondern die Instanz!
Und selbst wenn du in dem Falle den Wert von AKey änderst, dann wird der Wert von
Delphi-Quellcode:
procedure Foo( AKey : TWohnung );
begin
  AKey := TWohnung.Create; // In AKey steht jetzt der Wert $22222222
end;

procedure Bar;
var
  LKey : TWohnung;
begin
  LKey := TWohnung.Create; // <-- In LKey steht jetzt z.B. der Wert $11111111
  Foo( LKey );
  // LKey hat jetzt immer noch den Wert $11111111
end;
LKey nicht geändert.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat