mjn*_*mjn 8 delphi interface rtti delphi-2010 delphi-xe
使用Delphi 2010中的新扩展RTTI,Delphi应用程序(在运行时)是否可以构建实现给定接口的所有类的列表?
Bar*_*lly 20
从技术上讲,只要接口具有GUID并且您关心的类位于单元的接口部分中.
RTTI单元(还)没有用于描述类实现的所有接口的API,但数据在类型信息中.
可以从此表达式获取接口类型的GUID:
GetTypeData(TypeInfo(ITheInterface))^.Guid
Run Code Online (Sandbox Code Playgroud)
要么:
ctx: TRttiContext;
// ...
(ctx.GetType(TypeInfo(ITheInterface)) as TRttiInterfaceType).GUID
Run Code Online (Sandbox Code Playgroud)
然后可以使用TClass.GetInterfaceEntry(IID)- 检查实例类型的类- 如果它返回非nil,则该类实现接口.
可以通过检索在单元的接口部分中声明的所有类TRttiContext.GetTypes.
编写实际的迭代和提取代码留给读者练习.