Der Setter sollte den Record-Parameter schon als "const" übergeben bekommen.
Delphi-Quelltext
1:
| procedure SetStamm(const Value: TStamm); |
Sonst wird zwei mal eine Kopie von TStamm erzeugt, einmal beim Aufruf der Funktion und einmal bei der Zuweisung von iStamm.
Membervariablen werden üblicherweise mit einem "F" am Anfang gekennzeichnet (also eigentlich FStamm).
Diese Zuweisung kann aber dennoch nicht funktionieren:
Delphi-Quelltext
1:
| Personen.Stamm.Anrede := Edit1.text; |
Es erfolgt keine direkte Zuweisung auf Personen.Stamm, deshalb wird hier nur der Getter aufgerufen.
Dieser erzeugt eine Kopie von iStamm und die Anrede der Kopie würde verändert werden, nicht die von iStamm.
Aktuelle Delphiversionen erkennen das als Unfug und zeigen eine Fehlermeldung.
Wenn TStamm ebenfalls eine Klasse währe, würde die direkte Zuweisung auf Anrede funktionieren, da Objekte immer als Referenz übergeben werden.
Eine Möglichkeit:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| var lStamm: TStamm; begin lStamm := Personen.Stamm; lStamm.Anrede := Edit1.text; Personen.Stamm := lStamm; end; |