如何判断一个TClass是否来自另一个?

时间:2011-11-22 14:39:36

标签: delphi class delphi-7

我正在尝试做这样的事情:

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.

1 个答案:

答案 0 :(得分:18)

首先,您应该检查是否可以将函数更改为仅接受表单类:

function CreateIfForm(const nClass: TFormClass): TForm;

并且不需要进行类型检查和转换。

如果不可行,您可以使用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;