2010-06-25 73 views
4

我正在使用Delphi Pro 6.現在,知道一個類是否缺少一個基類抽象方法的唯一方法就是等待IDE發出一個「構造包含抽象方法的{derived class}的實例{base class.abstract method name}「警告或在試圖調用缺少的方法時等待運行時抽象錯誤方法。前者是不夠的,因爲它只能發現當前項目中實際構建的派生類的警告。後者只是很痛苦。Delphi 6:關於缺少抽象類方法的強制編譯器錯誤?

如果Delphi爲所有不立即聲明/實現基類抽象方法的類輸出一個致命警告,那將會更好。有沒有人知道一種方法來設置這個或這樣做的插件?

謝謝。

回答

2

我發現做到這一點最簡單的方法是使用條件定義,創建,你認爲不應該有任何抽象方法的類的實例,在單位初始化區域添加部分:

{$IFDEF CheckAbstracts} 
initialization 
    TSubclass1.Create(params); 
    TAbstactClass1.Create(params); // Gives constructing instance of {derived class} containing abstract method warning 
{$ENDIF} 

有條件地使用CheckAbstracts進行編譯,每當你有一個不完全實現的類時,你將會收到警告。

+0

有趣的方法,我想我會加入到我的標準做法。 – dummzeuch 2010-06-26 19:47:52

+0

這是跟蹤運行時抽象錯誤的結果,使用ClassReference.Create時創建,而不是TClassXXX.Create – 2010-06-27 05:05:08

+0

傑出點Gerry。由於運行時錯誤可能與實際原因脫節,因此這些是真正的痛苦追蹤。 – 2010-06-27 14:52:19

1

有效不執行這些方法。您可能打算在另一個子類型中實現抽象方法。

德爾福/ Win32的更高版本(我不記得是哪一個)引入了正式的abstract類,這些類在你做和沒有打算實例化類型時都清楚了。如果你對使用這個技術很嚴格,那麼你所要求的功能就會變得有意義。但對於D6來說,目前尚不清楚。

2

包含抽象方法的類只有在實例化類時纔是危險的,所以Delphi的警告是點亮的。如果忽略至少一個「使用抽象方法實例化類」,則只會得到抽象錯誤運行時異常。

+1

還有另一種可能發生的方式 - 如果使用類引用。例如如果你有一個具有(虛擬)'GetItemClass'函數的列表類,並且你調用'NewItem:= GetItemClass.Create;',編譯器不能確定你將實例化一個抽象類。 – 2010-06-25 23:55:14

+0

+1 - 在正常情況下很容易忽略警告。 – 2012-01-01 19:17:13