2011-11-22 5 views
6

sto cercando di fare qualcosa di simile:Come posso sapere se un TClass è derivato da un altro?

function CreateIfForm (const nClass : TClass) : TForm; 
begin 
    if not (nClass is TFormClass) then 
    raise Exception.Create('Not a form class'); 
    Result := (nClass as TFormClass).Create(Application); 
end; 

Questo produce errore "Operatore non applicabile a questo tipo di operando". Sto usando Delphi 7.

+0

Non dimenticare di accettare le risposte ;-) – TLama

risposta

17

In primo luogo si dovrebbe verificare se è possibile modificare la funzione per accettare solo una classe form:

function CreateIfForm(const nClass: TFormClass): TForm; 

e bypassare la necessità di controllo di tipo e la colata.

Se questo non è posssible, è possibile utilizzare InheritsFrom:

function CreateIfForm(const nClass: TClass): TForm; 
begin 
    if not nClass.InheritsFrom(TForm) then 
    raise Exception.Create('Not a form class'); 
    Result := TFormClass(nClass).Create(Application); 
end; 
+0

InheritsFrom! Sì, è esattamente quello che sto cercando. Grazie –

+0

@Ulrich - La tua seconda risposta è davvero quella giusta: la funzione non dovrebbe mai nemmeno accettare una classe che non è una forma. –

+0

@Nick, il tuo diritto ovviamente. Ho riformulato la mia risposta per riflettere meglio questo. –