2011-11-22 10 views
6

私はこのような何かやろうとしている:1つの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; 

これはエラー「このオペランドのタイプに適用できない演算子」を生成します。

function CreateIfForm(const nClass: TFormClass): TForm; 

と型チェックとキャストの必要性をバイパス:私は

+0

は答え;-) – TLama

答えて

17

まずデルファイ7を使用してい あなたが唯一のフォームクラスを受け入れるように機能を変更することができるか調べなければなりません。

これは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 - あなたの2番目の答えは本当に正しいものです:関数は決してフォームではないクラスを受け入れるべきではありません。 –

+0

@Nick、もちろんあなたの権利。私はこれをより良く反映させるために私の答えを改めました。 –