gpt4 book ai didi

Delphi抽象类避免实现

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

this您看到的问题是可以创建一个添加 abstract 关键字的抽象类。我正在用 Delphi 翻译一个项目,但我发现它允许创建抽象类。这是代码:

type
TCableSPF = class abstract
//code
end;

这当然是一个抽象类,我有很多实现它的子类。顺便说一句,我发现是否可以创建这样的实例;

a := TCableSPF.Create;

当我尝试调用其虚拟和抽象方法时,我收到错误,这没关系,但我可以阻止创建该类吗?或者Delphi默认允许这样做?感谢您的帮助

最佳答案

类抽象Delphi for .Net时代的延续。
由于未知的原因,该关键字背后没有(当前)实现。

如果你想阻止抽象类的实例化,这个关键字没有帮助。相反,请执行以下操作:

type
TCableSPF = class abstract
//code
strict protected
//Define all constructors for an abstract class as protected.
constructor Create; virtual; reintroduce;
end;

通过将所有构造函数定义为 protected ,只有后代对象可以访问构造函数,其他代码无法访问构造函数。
因为您重新引入了虚拟构造函数,所以您也无法使用以下方式实例化它:

unit A; 

type
TMyAbstractObject = class abstract(TObjectX)
strict protected
constructor Create; virtual; reintroduce;
end;

...
unit B;

TMyClass = class of TObjectX;

AbstractObjectInstance = TMyClass.Create; //Will not work for TMyAbstractObject

请注意,您不应该声明构造函数覆盖。相反,将其声明为virtual reintroduce(如果您不想允许虚拟构造函数,则只需声明reintroduce)。

关于Delphi抽象类避免实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44227790/

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