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