簡體   English   中英

Delphi抽象類避免實現

[英]Delphi abstract class avoid implementation

這個問題中,您可以看到可以創建一個添加abstract keywrod的抽象類。 我正在Delphi中翻譯一個項目,但我發現它允許創建一個抽象類。 這是代碼:

type
 TCableSPF = class abstract
  //code
end;

這是一個抽象類,當然我有很多實現它的子類。 順便說一句,我看到可以創建一個這樣的實例;

a := TCableSPF.Create;

當我嘗試調用其虛擬和抽象的方法時,我得到了錯誤,這是可以的,但我可以阻止創建類嗎? 或者Delphi默認允許這個? 謝謝您的幫助

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 )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM