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.
Schön - ich wusste nie, dass es verwendet werden könnte, um solche Probleme zu lösen! –