con*_*tor 8 delphi rtti delphi-2010
我有两个问题(其中至少有一个是关于D2010中的RTTI和动态实例)
TRTTIConstructor.Invoke.在相邻的项目符号点中,可以找到"动态构造实例而无需虚拟构造函数和元类".这似乎是一个很棒的功能(正是我需要的,顺便说一下)!但是,当我查看D2010文档(ms-help://embarcadero.rs2010/vcl/Rtti.html)时,我找不到它.它被撤销了吗?Mas*_*ler 10
我认为该功能已被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;
Run Code Online (Sandbox Code Playgroud)
这会找到最高的构造函数Create,它不带参数.如果您知道要查找的内容,可以修改它以查找具有其他签名的其他构造函数.然后只需调用Invoke结果.