フォームタイプのリストを取得する必要がありますが、特定の基本フォームから派生したタイプのものだけを取得する必要があります。拡張RTTIを使用して、特定のクラスから派生したクラスのリストを取得するにはどうすればよいですか?
私は私の現在のコードがあるをデルファイ2010使用して、種類を参照するRTTIを強化
:
rc := TRTTIContext.Create;
rtyps := rc.GetTypes;
for rtyp in rtyps do
begin
if not(rtyp.IsInstance) then Continue;
// Now I need to check if rtyp.AsInstance.MetaclassType is derived from TMyBaseForm
end;
私は、オブジェクトをインスタンス化し、それが実行されないだろうと、オペレータ「です」を使用したくありませんはやくて。 TMyBaseFormに導入された方法は、RTTIコンテキストで発見された場合
は、現在の回避策として、私がテスト:
if (rtyp.GetMethod('MyMethod') = nil) then Continue;
ものの場合、それは問題につながることができますので、これは、クリーンな解決策ではないとの方法同じ名前が別のクラスブランチに導入されました。
私の質問には、クラスタイプが別のクラスタイプから派生しているかどうかを検出するための定期的な方法がありますか?
おかげで、
RTTIを使用して実装する方法はわかりませんが、[ClassParent](http://docwiki.embarcadero.com/VCL/en/System.TObject.ClassParent)関数があります。クラスの直下祖先の型を返します。または、特定のクラスタイプまたはオブジェクトがクラスのインスタンスまたはその子孫のインスタンスであるかどうかを調べる必要がある場合は、[InheritsFrom](http://docwiki.embarcadero.com/VCL/en/System.TObject.InheritsFrom)を使用します。関数。 – TLama