首先,我們需要定義什麼抽象類意思。在我看來有兩個競爭定義:
- 抽象類是一個不能被實例化的類。這是最常用的定義。
- 抽象類是一個包含多個抽象方法的類。
由於Delphi沒有執行定義1的語言機制,所以看起來定義2是適用於這個問題的定義。
而問題的答案是,包含抽象方法的類可以與Visual Form Inheritance一起使用。
Delphi的現代版本允許您使用abstract
關鍵字修飾類。但是,這不起作用。你仍然可以實例化這樣一個類。我的理解是abstract
關鍵字是爲了Delphi.net編譯器的好處而添加的。
再次,在Delphi的現代版本中,您可以配置編譯器將對具有抽象方法的類的實例化作爲編譯錯誤進行處理。這可能是最接近你可以得到德爾福定義1.
然而,即使這並不完全堅持定義1,因爲這些類可以通過RTTI或虛擬構造函數實例化。而設計組件實例化的機制就是一個很好的例子。
拿這個類,例如:
type
TForm1 = class(TForm)
public
procedure Boo; virtual; abstract;
end;
即使你設置W2000包含抽象方法到錯誤,你仍然可以讓框架實例化的類實例的構建選項。只有編寫TForm1.Create
時,編譯器纔會對象。
你能闡述一下你想用這個抽象類來實現什麼(特別是爲什麼它必須是抽象的)? – 2013-04-10 15:29:12
你不能自己嘗試一下嗎?用VFI設置幾個表單,給基類一個抽象方法,看看會發生什麼。 – 2013-04-10 15:46:22