2017-08-16 5 views
0

J'ai une classeComment transformer une propriété d'une classe lors de l'exécution?

type 
    myClass = class 
    private 
    FId: Integer; 
    public 
    function GetId: Integer; 
    property Id: Integer read FId; 
    end; 

Maintenant, je veux échanger le getter de la propriété Id lors de l'exécution d'utiliser la méthode GetId au lieu du champ FId. Puis-je utiliser RTTI, ou d'autres méthodes, pour réaliser cela?

+1

bienvenue à empiler sur le flux s'il vous plaît expliquer plus on ne sait pas ce que vous demandez. –

+0

ID de propriété: entier lu FId; propriété Id valeur de Fid, je veux échanger GetId getValue dans l'exécution – mimakongjing

+0

Voulez-vous mettre la valeur de getid dans Fid? –

Répondre

1

Vous ne pouvez pas remplacer le champ du lecteur de propriétés par une méthode getter lors de l'exécution. Mais vous pouvez écrire ceci:

type 
    TMyClass = class 
    private 
    FId: Integer; 
    function GetId: Integer; 
    public 
    property Id: Integer read GetId; 
    end; 

implementation 

function TMyClass.GetId: Integer; 
begin 
    if IWantToReturnField then 
    Result := FId 
    else 
    Result := FId + SomeExtraStuff; 
end; 
+0

Bien sûr, je le sais, mais celui-ci vous avez écrit n'est pas ce que je veux, mais merci beaucoup pour votre aide – mimakongjing

+0

Peut-être qu'il y a plus de flexibilité si ce getter déclenche un événement. –

+0

@David, dépend de ce que vous voulez faire. Le déclenchement d'un événement est pour le consommateur de classe. – Victoria