Der Zugriff auf ein Record erfolgt ja anders als bei einer Klasseninstanz.
Wir machen das Gleiche erhalten aber unterschiedliche Ergebnisse.
Delphi-Quellcode:
type
TMyRecord = record
Info : string;
end,
TMyObject = class
Info : string;
end;
var
r1, r2 : TMyRecord;
o1, o2 : TMyObject;
begin
// Erst mal das Objekt der Begierde
o1 := TMyObject.Create;
o1.Info = 'Test1';
o2 := o1;
o2.Info := 'Test2';
ShowMessage( o1.Info + ' ' + o2.Info ); // => Test2 Test2
o1.Free;
o2 := nil;
// und jetzt der Record
r1.Info := 'Test1';
r2 := r1;
r2.Info := 'Test2';
ShowMessage( r1.Info + ' ' + r2.Info ); // => Test1 Test2 !!!!!
end;
Bei einer Instanz wird halt die Referenz übergeben, ein Record wird bei einer Zuweisung dupliziert!
Warum der Record in diesem Fall nicht verändert werden kann liegt daran, dass über den Enumerator der Record quasi wie eine RO-Property geliefert wird, und dann ist auch das Record RO.
Delphi-Hilfe:
E2064: Der linken Seite kann nichts zugewiesen werden (Delphi)
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)