Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

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

AW: RTTI records & SetValue

  Alt 6. Sep 2011, 17:06
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)
  Mit Zitat antworten Zitat