gpt4 book ai didi

德尔福7 : create a new instance of an unknown object

转载 作者:行者123 更新时间:2023-12-03 15:19:57 25 4
gpt4 key购买 nike

我有一个对未知类的实例的 TObject 引用。如何调用这个未知类的构造函数来创建它的另一个实例?我知道Delphi有RTTI,但不清楚如何使用它。

最佳答案

您无法构造未知类型的对象。编译器必须在编译时知道正确的类类型,以便生成正确的代码。如果构造函数需要参数怎么办?多少?什么数据类型?它们是通过堆栈还是寄存器传递的?此信息很重要。

话虽这么说,如果所讨论的类全部派生自具有虚拟构造函数的公共(public)基类,那么您只能构造这样的对象。您可以使用 TObject.ClassType() 方法获取对现有对象的类类型的引用,将其类型转换为基类类型,然后调用构造函数。例如:

type
TBase = class
public
constructor Create(params); virtual;
end;

TBaseClass = class of TBase;

TDerived1 = class(TBase)
public
constructor Create(params); override;
end;

TDerived2 = class(TBase)
public
constructor Create(params); override;
end;

...

var
NewObj: TBase;
begin
if SomeObj is TBase then
NewObj := TBaseClass(SomeObj.ClassType).Create(params);
end;

关于德尔福7 : create a new instance of an unknown object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26785182/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com