gpt4 book ai didi

Delphi - 确保调用类构造函数

转载 作者:行者123 更新时间:2023-12-03 14:49:43 26 4
gpt4 key购买 nike

这可能是一个简单的问题,但我想知道如何确保调用类的构造函数。

如果我有以下代码:

type TMyObject = class(TObject)
public
constructor Create;override;
end;

implementation

constructor TMyObject.Create;override;
begin
inherited;
//do other instantiation
end;

Delphi 不允许这样做 - “无法重写静态方法”。

我想要做的是确保使用我的自定义 Create 构造函数创建对象并禁止调用祖先 Create 构造函数。

我当前的问题解决方案是定义一个唯一签名的 Create 构造函数,如下所示:

constructor Create(aName : String);overload;

但程序员可能会调用祖先的 Create() 方法。

最佳答案

您只需重新引入具有祖先名称的构造函数即可。一旦执行此操作,用户就无法调用 TObject 中引入的构造函数来创建 TMyObject。如果您使用这样的代码:

TMyObject = class
public
constructor Create;
end;

constructor TMyObject.Create;
begin
// I am not calling the inherited constructor because
// I do not want to.
end;

您不要在 TMyObject.Create 上使用 override 修饰符,因为祖先的构造函数不是虚拟的。

使用此方案,用户不可能使用祖先中引入的构造函数来创建 TMyObject。在本例中,祖先是 TObject,它唯一的构造函数是 TObject.Create。如果用户编写以下代码:

X := TMyObject.Create;

很明显,会调用TMyObject的构造函数,而不是TObject中引入的构造函数。

<小时/>

如果您担心用户会为了使用祖先的构造函数创建您的类而跳过重重困难,您可以通过 AfterConstruction 方法完成您的工作。这是一个虚拟方法,因此即使您的对象是使用祖先类型的类引用创建的,它也会被调用:

TMyObject = class
public
procedure AfterConstruction;override;
end;

关于Delphi - 确保调用类构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6646295/

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