枚举实现给定接口的所有Delphi类?

时间:2010-02-06 21:08:15

标签: delphi interface delphi-2010 rtti delphi-xe

使用Delphi 2010中的新扩展RTTI,Delphi应用程序(在运行时)是否可以构建实现给定接口的所有类的列表?

1 个答案:

答案 0 :(得分:20)

技术上是,只要接口有GUID,你关心的类在单元的接口部分。

RTTI单元(还)没有用于描述类实现的所有接口的API,但数据属于信息类型。

接口类型的GUID可以从这个表达式获得:

GetTypeData(TypeInfo(ITheInterface))^.Guid

或:

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

然后可以使用TClass.GetInterfaceEntry(IID)检查实例类型的类 - 如果它返回非nil,则该类实现接口。

可以通过TRttiContext.GetTypes检索在单位的接口部分中声明的所有类。

编写实际的迭代和提取代码留给读者练习。