簡體   English   中英

如何重載Delphi類函數

[英]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”指令)。

我想函數結果類型不能重載。 如果有的話,定義這種重載的正確方法是什么?

通過返回類型檢查了函數重載? 但是它提到了這種超載的缺點和優點,沒有提到Delphi。

函數重載只能基於參數,而不能基於返回值。 您沒有辦法讓兩個重載僅在返回值上有所不同。

更重要的是,即使你可以這樣做,你也試圖使用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.

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