8

Delphi 2010の新しい拡張RTTIを使用すると、Delphiアプリケーションは(実行時に)特定のインターフェイスを実装するすべてのクラスのリストを作成できますか?

4

1 に答える 1

20

技術的にはそうです。インターフェイスにGUIDがあり、関心のあるクラスがユニットのインターフェイスセクションにある限り。

RTTIユニットには(まだ)クラスが実装するすべてのインターフェイスを記述するためのAPIはありませんが、データはタイプinfoにあります。

インターフェイスタイプのGUIDは、次の式から取得できます。

GetTypeData(TypeInfo(ITheInterface))^.Guid

また:

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

インスタンスタイプのクラスは、TClass.GetInterfaceEntry(IID)-を使用してチェックできます。nil以外を返す場合、クラスはインターフェイスを実装します。

ユニットのインターフェースセクションで宣言されたすべてのクラスは、を介して取得できますTRttiContext.GetTypes

実際の反復と抽出コードを書くことは、読者の練習問題として残されています。

于 2010-02-06T22:23:22.427 に答える