Delphi抽象类避免实现

Emm*_*oli 4 delphi

这个问题中,您可以看到可以创建一个添加abstractkeywrod 的抽象类.我正在Delphi中翻译一个项目,但我发现它允许创建一个抽象类.这是代码:

type
 TCableSPF = class abstract
  //code
end;
Run Code Online (Sandbox Code Playgroud)

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

a := TCableSPF.Create;
Run Code Online (Sandbox Code Playgroud)

当我尝试调用其虚拟和抽象的方法时,我得到了错误,这是可以的,但我可以阻止创建类吗?或者Delphi默认允许这个?谢谢您的帮助

Joh*_*ica 7

class abstractDelphi for .Net日子的延续.
由于未知原因,此关键字后面没有(当前)实现.

如果要阻止抽象类的实例化,此关键字将无济于事.而是执行以下操作:

type
  TCableSPF = class abstract
  //code
strict protected
  //Define all constructors for an abstract class as protected.
  constructor Create; virtual; reintroduce;
end;
Run Code Online (Sandbox Code Playgroud)

通过将所有构造函数定义为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 
Run Code Online (Sandbox Code Playgroud)

请注意,您应该声明构造override.而是声明它virtual reintroduce(或者只是reintroduce如果你不想允许虚拟构造函数).