class abstract
是从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
请注意,您应该不声明构造override
。取而代之的是声明virtual reintroduce
(或者如果你不想允许虚拟构造函数,只需要reintroduce
)。
这是一个已知问题:https://quality.embarcadero.com/browse/RSP-10235 –
经过一些Google搜索后,我发现了一个选项'{$ WARN CONSTRUCTING_ABSTRACT ERROR}',但是,我看了一下[ RADStudio的东京文档](http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Classes_and_Objects)(在由@SebastianProske显示的链接中引用),并且不幸发现了以下注释:“_Delphi允许实例化一个声明为抽象的类,为了向后兼容,但不应该再使用此功能_“。 : -/ – silvioprog