使用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)部分中声明的所有类。编写实际的迭代和提取代码留给读者练习。