有时我会在没有重载的方法之后使用“overload”关键字。
除了代码的可读性和可维护性之外,这还有其他我应该注意的影响吗?
答案 0 :(得分:18)
最大的区别在于,当方法的参数不正确时,对于非重载方法,错误消息明显更好。
program Test;
procedure F(X: Integer);
begin
end;
procedure G(X: Integer); overload;
begin
end;
var
P: Pointer = nil;
begin
F(P); // E2010 Incompatible types: 'Integer' and 'Pointer'
G(P); // E2250 There is no overloaded version of 'G' that can be called with these arguments
end.
更巧妙的是,重载方法可能会超载您不知道的函数。考虑标准IfThen
函数。 StrUtils.IfThen
只存在一次:
function IfThen(AValue: Boolean; const ATrue: string;
AFalse: string = ''): string; overload; inline;
但它被标记为overload
。那是因为Math.IfThen
超载,如果一个单位同时使用Math
和StrUtils
,则不合格的IfThen
会根据参数解析为正确的函数,无论如何uses
列表中单位的顺序。