使用 Delphi 2010 中新的扩展 RTTI,Delphi 应用程序(在运行时)能否构建实现给定接口的所有类的列表?
问问题
1531 次
1 回答
20
技术上是的,只要接口有一个 GUID 并且你关心的类在单元的接口部分。
RTTI 单元(还)没有用于描述类实现的所有接口的 API,但数据在类型信息中。
接口类型的 GUID 可以从这个表达式中获得:
GetTypeData(TypeInfo(ITheInterface))^.Guid
或者:
ctx: TRttiContext;
// ...
(ctx.GetType(TypeInfo(ITheInterface)) as TRttiInterfaceType).GUID
然后可以使用检查实例类型的类TClass.GetInterfaceEntry(IID)
- 如果它返回非零,则该类实现接口。
在单元的接口部分中声明的所有类都可以通过TRttiContext.GetTypes
.
编写实际的迭代和提取代码留给读者作为练习。
于 2010-02-06T22:23:22.427 回答