[英]Delphi abstract class avoid implementation
在這個問題中,您可以看到可以創建一個添加abstract
keywrod的抽象類。 我正在Delphi中翻譯一個項目,但我發現它允許創建一個抽象類。 這是代碼:
type
TCableSPF = class abstract
//code
end;
這是一個抽象類,當然我有很多實現它的子類。 順便說一句,我看到可以創建一個這樣的實例;
a := TCableSPF.Create;
當我嘗試調用其虛擬和抽象的方法時,我得到了錯誤,這是可以的,但我可以阻止創建類嗎? 或者Delphi默認允許這個? 謝謝您的幫助
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
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.