我有两个问题(其中至少有一个是关于D2010中的RTTI和动态实例)
>我正在阅读巴里凯利(Barry Kelly)看起来像conference talk的薄片,并在第二页上找到. 13看起来很有趣的东西:TRTTIConstructor.Invoke.在相邻的项目符号点中,可以找到“动态构造实例而无需虚拟构造函数和元类”.这似乎是一个很棒的功能(正是我需要的,顺便说一下)!但是,当我查看D2010文档(ms-help://embarcadero.rs2010/vcl/Rtti.html)时,我找不到它.它被撤销了吗?
>如果类名存储在字符串中,创建类实例的最小方法是什么?
解决方法
我认为该功能已被TRttiMethod吸收.它具有IsConstructor,IsDestructor和IsClassMethod属性,因此它可以用于“特殊”类型的方法以及普通方法.
至于问题2,尝试这样的事情:
function GetConstructor(val: TRttiInstanceType): TRttiMethod; var method: TRttiMethod; begin for method in val.getmethods('Create') do begin if (method.IsConstructor) and (length(method.GetParameters) = 0) then exit(method); end; raise EInsufficientRTTI.CreateFmt('No simple constructor available for class %s ',[val.Metaclasstype.ClassName]); end;
这将找到名为Create的最高构造函数,该构造函数不带参数.如果您知道要查找的内容,可以对其进行修改以查找具有其他签名的其他构造函数.然后只需在结果上调用Invoke.
原文地址:https://www.jb51.cc/delphi/102335.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。