通过 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)
检查实例类型的类 - 如果它返回非零,则该类实现该接口(interface)。
可以通过TRttiContext.GetTypes
检索在单元的接口(interface)部分中声明的所有类。
编写实际的迭代和提取代码留给读者作为练习。
关于delphi - 枚举实现给定接口(interface)的所有 Delphi 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2214741/