2012-06-09 12 views

Odpowiedz

18

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.

+3

Niezły - nigdy nie wiedziałem, że można go użyć do rozwiązania takich problemów! –

Powiązane problemy