Подтвердить что ты не робот

Имеет ли значение ключевое слово "перегрузка"?

Иногда у меня есть ключевое слово "перегрузка" после метода, который не перегружен.

Помимо читаемости и поддерживаемости кода, имеет ли это какое-либо другое влияние, о котором я должен знать?

4b9b3361

Ответ 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 существует ровно один раз:

function IfThen(AValue: Boolean; const ATrue: string;
  AFalse: string = ''): string; overload; inline;

пока он отмечен как overload. Это связано с тем, что он перегружен с помощью Math.IfThen, и если в одном устройстве используются как Math, так и StrUtils, безоговорочный IfThen будет разрешать правильную функцию в зависимости от аргументов и независимо от порядка единиц в uses.