E2174 '%s' non précédemment déclaré comme PROPERTY (Delphi)

De RAD Studio
Aller à : navigation, rechercher

Remonter à Messages d'erreur et d'avertissement (Delphi)

Vous avez essayé de remonter une propriété vers un niveau de visibilité différent par re-déclaration, mais <nom> dans la classe de base n'était pas déclaré en propriété. -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.

La tentative de re-déclaration de 'Derived.Title' permet de changer le champ utilisé pour lire et écrire la propriété 'Title' ainsi que la remonter à la visibilité 'public'. Malheureusement, le programmeur veut réellement utiliser 'TitleProp' et non '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.

Il existe deux moyens d'approcher cette erreur. La première, et probablement la plus utilisée, est de spécifier la propriété real qui doit être re-déclarée. La deuxième, que vous pouvez voir dans la re-déclaration de 'Title' s'attaque au problème en créant explicitement une nouvelle propriété, ayant le même nom qu'un champ dans la classe de base. Cette nouvelle propriété cachera le champ base, qui ne sera alors plus accessible sans transtypage. (Remarque : Si vous avez activé les avertissements, la re-déclaration de 'Title' émettra un avertissement vous notifiant que la re-déclaration va cacher le membre de la classe de base.)