枚举实现给定接口的所有Delphi类?

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.

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