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

8

在Delphi 2010中,通过新的扩展RTTI,一个Delphi应用程序是否能够在运行时构建实现给定接口的所有类的列表?

1个回答

20

从技术上讲是可以的,只要接口有GUID并且你关心的类在单元的接口部分中。

RTTI单元目前没有描述类实现的所有接口的API,但数据在类型信息中。

接口类型的GUID可以从此表达式中获取:

GetTypeData(TypeInfo(ITheInterface))^.Guid
或:
ctx: TRttiContext;
// ...
(ctx.GetType(TypeInfo(ITheInterface)) as TRttiInterfaceType).GUID

使用TClass.GetInterfaceEntry(IID)可以检查实例类型的类是否实现了接口。

可以通过TRttiContext.GetTypes获取所有在单元接口部分声明的类。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接