在Delphi 2010中,通过新的扩展RTTI,一个Delphi应用程序是否能够在运行时构建实现给定接口的所有类的列表?
在Delphi 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
获取所有在单元接口部分声明的类。
编写实际的迭代和提取代码留给读者作为练习。