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