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’操作符,因为它不会及时执行. 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; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |