Иногда у меня есть ключевое слово "перегрузка" после метода, который не перегружен.
Помимо читаемости и поддерживаемости кода, имеет ли это какое-либо другое влияние, о котором я должен знать?
Ответ 1
Большая разница заключается в том, что, когда аргументы метода неверны, сообщение об ошибке значительно лучше для метода без перегрузки.
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 существует ровно один раз:
пока он отмечен как overload. Это связано с тем, что он перегружен с помощью Math.IfThen, и если в одном устройстве используются как Math, так и StrUtils, безоговорочный IfThen будет разрешать правильную функцию в зависимости от аргументов и независимо от порядка единиц в uses.