加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 如何获取派生自给定类的类的列表,增强型RTTI?

发布时间:2020-12-15 03:50:35 所属栏目:大数据 来源:网络整理
导读:我需要获取表单类型的列表,但只能从给定的基础表单派生类型. 我使用Delphi 2010和增强型RTTI浏览类型 我当前的代码是: rc := TRTTIContext.Create;rtyps := rc.GetTypes;for rtyp in rtyps dobegin if not(rtyp.IsInstance) then Continue; // Now I need t
我需要获取表单类型的列表,但只能从给定的基础表单派生类型.

我使用Delphi 2010和增强型RTTI浏览类型

我当前的代码是:

rc := TRTTIContext.Create;
rtyps := rc.GetTypes;
for rtyp in rtyps do
begin
  if not(rtyp.IsInstance) then Continue;

  // Now I need to check if rtyp.AsInstance.MetaclassType is derived from TMyBaseForm
end;

我不想实现一个对象,并使用’is’操作符,因为它不会及时执行.
作为当前的解决方法,我测试在RTTI上下文中是否找到了在TMyBaseForm中引入的方法:

if (rtyp.GetMethod('MyMethod') = nil) then Continue;

但是这不是一个干净的解决方案,因为如果在另一个类分支中引入了具有相同名称的方法,则可能会导致问题.

所以我的问题是:有没有定期的方式来检测类类型是否从另一个类类型派生?

谢谢,

解决方法

当你调用AsInstance返回一个 TRttiInstanceType,从那里你必须访问 MetaclassType属性,它是一个 TClass引用反射类型,最后使用TClass你可以调用 InheritsFrom函数
for rtyp in rtyps do
if (rtyp.TypeKind=tkClass) and rtyp.IsInstance and rtyp.AsInstance.MetaclassType.InheritsFrom(TMyBaseForm) then
begin

  // do something
end;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读