[英]How to overload a Delphi class function
我有這樣的Delphi(2007)類函數:
Class Function InitGlobal : TForm; Overload; Virtual; Abstract;
在一些后代課程中,我嘗試:
Class Function InitGlobal : TDescendentForm; Overload; Override;
但Delphi抱怨TDescendentForm.InitGlobal
與之前的聲明不同(盡管存在“Overload”指令)。
我想函數結果類型不能重載。 如果有的話,定義這種重載的正確方法是什么?
函數重載只能基於參數,而不能基於返回值。 您沒有辦法讓兩個重載僅在返回值上有所不同。
更重要的是,即使你可以這樣做,你也試圖使用override
,並改變函數的簽名。 那也是不可能的。 覆蓋必須與被覆蓋的函數具有相同的簽名。
你可以做的是覆蓋函數,並保持相同的簽名。 您可以刪除overload
指令。 然后你的派生函數看起來像這樣:
class function InitGlobal: TForm; override;
現在,沒有什么可以阻止你返回TDescendentForm
的實例。 那仍然是一種TForm
。 你在這里要做的是在運行時返回一個更多的派生類型。
實現可能如下所示:
Result := TDescendentForm.Create(...);
// compile time type of Result is TForm, but that is assignment compatible
// at run time with an instance of TDescendentForm
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.