【发布时间】:2014-07-14 18:42:28
【问题描述】:
我有一个像这样的 Delphi (2007) 类函数:
Class Function InitGlobal : TForm; Overload; Virtual; Abstract;
在一些后代类中我尝试:
Class Function InitGlobal : TDescendentForm; Overload; Override;
但 Delphi 抱怨 TDescendentForm.InitGlobal 与之前的声明不同(尽管存在“Overload”指令)。
我猜函数结果类型不能重载。如果有的话,定义这种重载的正确方法是什么?
我检查了 Function overloading by return type?,但它提到了进行这种重载的利弊,而没有提及 Delphi。
【问题讨论】:
-
依我的拙见,你要么
overload要么override,但你不能同时做这两个。overload需要有不同的方法签名,而override表示该方法应替换派生类型中的同名方法。也许更详细的代码示例可以提供更多帮助。 -
你的意见无关紧要,@Will。事实是你可以同时做这两件事。它在 RTL 和 VCL 中多次发生。
-
感谢@RobKennedy 提供的信息。在我的职业生涯中,我从来没有同时做到这两点,因为我一直认为重载是只为给定行为定义不同参数的方法,而覆盖是只重新定义对象行为的方法。我从来没有碰巧同时做这两件事,而且我倾向于认为这是一个设计缺陷,不知何故。但是,嘿,如果您说它在 RTL 和 VCL 中多次完成,那么出于某种我根本不需要的原因,它一定是好的。 =)
标签: delphi methods overloading