2012-06-09 4 views

Antwort

18

Der große Unterschied ist, dass, wenn die Argumente für eine Methode falsch sind, die Fehlermeldung für eine nicht überladene Methode deutlich besser ist.

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. 

Subtiler kann eine überladene Methode mit Funktionen überladen werden, die Sie nicht kennen. Betrachten Sie die Standardfunktion IfThen. StrUtils.IfThen existiert genau einmal:

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

doch ist es als overload markiert. Das liegt daran, dass es mit Math.IfThen überlastet ist, und wenn eine einzelne Einheit sowohl Math als auch StrUtils verwendet, wird ein unqualifizierter IfThen abhängig von den Argumenten und unabhängig von der Reihenfolge der Einheiten in der uses Liste in die richtige Funktion aufgelöst.

+3

Schön - ich wusste nie, dass es verwendet werden könnte, um solche Probleme zu lösen! –

Verwandte Themen