Delphi抽象类避免实现

时间:2017-05-28 13:23:02

标签: delphi

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

type
 TCableSPF = class abstract
  //code
end;

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

a := TCableSPF.Create;

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

1 个答案:

答案 0 :(得分: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;

通过将所有构造函数定义为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 

请注意,您应声明构造函数override。如果您不想允许虚拟构造函数,请将其声明为virtual reintroduce(或仅reintroduce