在Delphi中可能有一個類方法調用具有相同名稱的繼承實例方法嗎?例如,我想是這樣的:在德爾福,我可以調用一個類方法同名的實例方法嗎?
//... Skipped surrounding class definitions
function TSomeAbstractDialogForm.Execute: Boolean;
begin
Result := ShowModal = mrOk;
end;
我有一對夫婦的是繼承了抽象的對話形式專門對話框類,每一類都有自己的工廠方法:
class function TSomeInheritingDialogForm.Execute: Boolean;
var
Fm: TSomeInheritingDialogForm;
begin
Fm := TSomeInheritingDialogForm.Create(nil);
try
Result := Fm.Execute;
finally
Fm.Free;
end
end;
這種做法導致在從F.Execute開始的永無止境的循環中,不是調用基類的預期實例方法,而是一遍又一遍地調用工廠方法(產生一堆創建的表單)。
當然,顯而易見的解決方案是更改工廠方法的名稱(我將其命名爲CreateAndShow),但它讓我感到好奇。編譯器怎麼沒有警告我隱藏的方法?有沒有一種方法可以在這種情況下顯式調用實例方法?
啊,當然,投給基地班。明顯。爲什麼我沒有想到這個? :-) 編譯器沒有警告我,我發現有點奇怪。 Delphi似乎錯過了隱藏實例方法的類方法的特例。 – 2008-12-23 16:37:38