Czasami mam słowo kluczowe "przeciążenie" po metodzie, która nie jest przeciążona.Czy słowo kluczowe "przeciążenie" ma znaczenie?
Oprócz czytelności i łatwości konserwacji kodu, czy ma to jakikolwiek inny wpływ, o którym powinienem wiedzieć?
Czasami mam słowo kluczowe "przeciążenie" po metodzie, która nie jest przeciążona.Czy słowo kluczowe "przeciążenie" ma znaczenie?
Oprócz czytelności i łatwości konserwacji kodu, czy ma to jakikolwiek inny wpływ, o którym powinienem wiedzieć?
Duża różnica polega na tym, że gdy argumenty dotyczące metody są niepoprawne, komunikat o błędzie jest znacznie lepszy w przypadku metody nieprzeciążonej.
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.
Bardziej subtelnie, metoda przeciążenia może być przeciążona funkcjami, o których nie wiesz. Rozważ standardową funkcję IfThen
. StrUtils.IfThen
istnieje dokładnie jeden raz:
function IfThen(AValue: Boolean; const ATrue: string;
AFalse: string = ''): string; overload; inline;
jeszcze jest oznaczona jako overload
. Dzieje się tak dlatego, że jest on przeciążony Math.IfThen
, a jeśli pojedyncza jednostka używa zarówno Math
, jak i StrUtils
, niezakwalifikowane IfThen
rozwiąże właściwą funkcję w zależności od argumentów i niezależnie od kolejności jednostek na liście uses
.
Niezły - nigdy nie wiedziałem, że można go użyć do rozwiązania takich problemów! –