delphi - 枚举实现给定接口(interface)的所有 Delphi 类?

标签 delphi interface delphi-2010 rtti delphi-xe

通过 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/

相关文章:

delphi - 在Delphi 2010迁移项目中,Rave BE的“代码报告”替代方案是什么?

delphi - 泛型和 Marshal/UnMarshal。我在这里缺少什么?

delphi - 指向同一个数组的指针数组

Delphi 7开启自动完成

C++:如何覆盖具有相同接口(interface)的特定类的方法

java - 如何正确扩展和实现Java泛型接口(interface)

c# - 在 C# 中实现 2 个相似的接口(interface)

delphi - 使用 XPath 从 XML 读取不同的值

c - 从服务访问 WebDav 资源时拒绝访问

delphi - 对象检查器网格高度有修复吗?德尔福2010