Sto usando una libreria di terze parti delphi di grandi dimensioni senza codice sorgente, questa libreria ha diverse classi con metodi astratti. Ho bisogno di determinare quando un metodo di abtract è implementato da una classe Descendant in runtime per evitare lo EAbstractError: Abstract Error
e mostra un messaggio personalizzato all'utente o usa invece un'altra classe.Come posso determinare se un metodo astratto è implementato?
ad esempio in questo codice Voglio verificare in runtime se è implementato lo MyAbstractMethod
.
type
TMyBaseClass = class
public
procedure MyAbstractMethod; virtual; abstract;
end;
TDescendantBase = class(TMyBaseClass)
public
end;
TChild = class(TDescendantBase)
public
procedure MyAbstractMethod; override;
end;
TChild2 = class(TDescendantBase)
end;
Come è possibile determinare se un metodo astratto è implementato in una classe Descendant in runtime?
Grazie, ma se si utilizza in questo modo ho bisogno di implementare una funzione per ogni tipo di classe e preforo una soluzione più generale. – Salvador
Non sono sicuro che il tuo codice sia corretto. 'ImplementsAbstractMethod (TChild2.Create)' restituirà true, ma né 'TChild2', né' TDescendantBase' hanno sovrascritto l'astratto 'MyAbstractMethod' di' TMyBaseClass'. http://pastebin.com/JufNPJkg –
@rinntech: Grazie per l'avviso. Ho aggiornato la risposta con il codice corretto. –