2011-11-22 82 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

@尼克,当然是你的权利。我改述了我的答案,以更好地反映这一点。 –

相关问题