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

最佳答案

从技术上讲,是的,只要接口(interface)具有GUID,并且您关心的类都在单元的接口(interface)部分中。

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

可以从以下表达式获取接口(interface)类型的GUID:

GetTypeData(TypeInfo(ITheInterface))^.Guid

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

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

可以通过TRttiContext.GetTypes检索单元的接口(interface)部分中声明的所有类。

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

10-08 04:48