【问题标题】:Enumerate all Delphi classes that implement a given interface?枚举所有实现给定接口的 Delphi 类?
【发布时间】:2011-01-13 22:59:47
【问题描述】:

使用 Delphi 2010 中新的扩展 RTTI,Delphi 应用程序(在运行时)能否构建实现给定接口的所有类的列表?

【问题讨论】:

    标签: delphi interface delphi-2010 rtti delphi-xe


    【解决方案1】:

    技术上是的,只要接口有一个 GUID 并且你关心的类在单元的接口部分。

    RTTI 单元(还)没有用于描述类实现的所有接口的 API,但数据在类型信息中。

    接口类型的 GUID 可以从这个表达式中得到:

    GetTypeData(TypeInfo(ITheInterface))^.Guid
    

    或:

    ctx: TRttiContext;
    // ...
    (ctx.GetType(TypeInfo(ITheInterface)) as TRttiInterfaceType).GUID
    

    然后可以使用TClass.GetInterfaceEntry(IID) 检查实例类型的类 - 如果返回非零,则该类实现接口。

    单元接口部分中声明的所有类都可以通过TRttiContext.GetTypes检索。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-18
      • 1970-01-01
      • 2020-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 2010-10-16
      相关资源
      最近更新 更多