質問

デルファイ2010年の新しい拡張RTTIで、(実行時)Delphiアプリケーションは、指定されたインタフェースを実装するすべてのクラスのリストを構築することができますか?

役に立ちましたか?

解決

技術的には、はい、そう長くインターフェースはGUIDとあなたが気にクラスを持っているとして、ユニットのインターフェースセクションにあります。

RTTIユニットは(まだ)、そのクラスが実装するすべてのインタフェースを記述するためのAPIを持っていないが、データタイプ情報である。

インターフェイスタイプのGUIDは、この式から取得することができます

GetTypeData(TypeInfo(ITheInterface))^.Guid

または

ctx: TRttiContext;
// ...
(ctx.GetType(TypeInfo(ITheInterface)) as TRttiInterfaceType).GUID

インスタンスタイプのクラスは、次にTClass.GetInterfaceEntry(IID)を使用して確認することができる - それは非ゼロを返す場合、クラスは、インターフェイスを実装する

単位のインタフェース部で宣言されたすべてのクラスはTRttiContext.GetTypesを介して取得することができます。

実際の反復と抽出コードの書き込みは、読者のための課題として残されている。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top