2011-11-22 81 views
6

我試圖做這樣的事情:如何判斷一個TClass是否是從另一個TClass派生的?

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; 

這將產生錯誤「操作並不適用於這一運算對象類型」。 我用Delphi 7

+0

不要忘了接受的答案;-) – TLama

回答

17

首先,你應該檢查你是否可以改變函數只接受一個窗體類:

function CreateIfForm(const nClass: TFormClass): TForm; 

,並繞過類型檢查和鑄造的需要。

如果這不是posssible,您可以使用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!是的,這正是我要找的。謝謝 –

+0

@Ulrich - 你的第二個答案確實是正確的:函數甚至不應該接受一個不是形式的類。 –

+0

@尼克,當然是你的權利。我改述了我的答案,以更好地反映這一點。 –

相關問題