Interessanterweise geht sowas aber mit einem Record, wenn man beim read wieder ein Feld des Records anspricht. Und mit privat oder nicht hat das auch nichts zu tun.
Delphi-Quellcode:
..
public
fFoo : Integer;
Property Foo : Integer read fFoo;
end;
ist zwar syntaktisch korrekt aber behämmert. Die Variante
Delphi-Quellcode:
..
protected
fFoo : Integer;
public
Property Foo : Integer read fFoo;
end;
ist Kretinismus 2.Klasse und ein Design Flaw übelster Sorte. Insofern 'muss' es sich um ein privates Feld handeln. Allerdings ist die Erwähnung von 'private' meinerseits ein Automatismus und rein syntaktisch ist das nicht notwendig.
Bei deinem interessanten Beispiel bei einem Record meinst Du das hier?
Delphi-Quellcode:
Type
TRec1 = Record
Foo : Integer;
End;
TRec = Record
Rec1 : TRec1;
Property Foo : Integer Read Rec1.Foo;
End;
Das geht mit einer Klasse nicht, weil der Getter direkt auf eine Adresse gemappt werden muss. Das sieht man an der Fehlermeldung des Compilers bei
Delphi-Quellcode:
Type
TRec1 = class
Foo : Integer;
End;
TRec = class
Rec1 : TRec1;
Property Foo : Integer Read Rec1.Foo;
End;
Zitat von
Compiler:
[Pascal Fehler] Unit16.pas(28): E2467 Record oder Objekttyp erforderlich
Ein Record geht also auch (=direktes Mapping)