Einzelnen Beitrag anzeigen

Dejan Vu
(Gast)

n/a Beiträge
 
#11

AW: Warum geht das eigentlich nicht?

  Alt 20. Jul 2014, 09:17
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)
  Mit Zitat antworten Zitat