与えられたインタフェースを実装するすべてのDelphiのクラスを列挙?
-
19-09-2019 - |
質問
デルファイ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
を介して取得することができます。
実際の反復と抽出コードの書き込みは、読者のための課題として残されている。
所属していません StackOverflow