E2174 '%s' wurde vorher nicht als PROPERTY deklariert (Delphi)
Nach oben zu Fehler- und Warnungsmeldungen (Delphi)
Sie haben versucht, eine Eigenschaft durch Redeklaration auf eine andere, höhere Sichtbarkeitsebene zu stellen, aber <name> in der Basis-Klasse wurde nicht als Eigenschaft deklariert. -W
program Produce; (*$WARNINGS ON*) type Base = class protected Caption : String; Title : String; property TitleProp : string read Title write Title; end; Derived = class (Base) public property Title read Caption write Caption; end; begin end.
Der Zweck einer Neudeklaration von 'Derived.Title' ist es, das Feld zu verändern, das zum Lesen und Schreiben der Eigenschaft 'Title' benutzt wird, und es der höheren public-Sichtbarkeit zur Verfügung zu stellen. Der Programmierer wollte eigentlich TitleProp benutzen und nicht Title.
program Solve; (*$WARNINGS ON*) type Base = class protected Caption : String; Title : String; property TitleProp : string read Title write Title; end; Derived = class (Base) public property TitleProp read Caption write Caption; property Title : string read Caption write Caption; end; begin end.
Dieser Fehler kann auf mehrere Arten beseitigt werden. Die erste Möglichkeit, die wahrscheinlich am häufigsten genutzt wird, ist die Festlegung der korrekten zu redeklarierenden Eigenschaft. Die zweite Möglichkeit, die in der Redeklaration von Title deutlich wird, beseitigt das Problem durch explizite Erstellung einer neuen Eigenschaft mit derselben Bezeichnung als ein Feld in der Basisklasse. Diese neue Eigenschaft verbirgt das Basisfeld, auf das daher ohne Typumwandlung kein Zugriff mehr möglich ist. (Hinweis: Wenn Warnungen aktiviert sind, wird mit der Neudeklaration von Title eine Warnung ausgegeben, mit der Sie davon in Kenntnis gesetzt werden, dass der Member der Basisklasse durch die Neudeklaration verborgen wird.)