A volte ho la parola chiave "overload" dopo un metodo che non è sovraccarico.La parola chiave "overload" fa la differenza?
Oltre alla leggibilità e alla manutenibilità del codice, ha qualche altro impatto di cui dovrei essere a conoscenza?
A volte ho la parola chiave "overload" dopo un metodo che non è sovraccarico.La parola chiave "overload" fa la differenza?
Oltre alla leggibilità e alla manutenibilità del codice, ha qualche altro impatto di cui dovrei essere a conoscenza?
La grande differenza è che quando gli argomenti di un metodo non sono corretti, il messaggio di errore è significativamente migliore per un metodo non sovraccarico.
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.
In modo più sottile, un metodo sovraccarico può essere sovraccaricato di funzioni di cui non si è a conoscenza. Considerare la funzione standard IfThen
. StrUtils.IfThen
esiste esattamente una volta:
function IfThen(AValue: Boolean; const ATrue: string;
AFalse: string = ''): string; overload; inline;
ancora è contrassegnato come overload
. Questo perché è sovraccarico di Math.IfThen
e, se una singola unità utilizza sia Math
e StrUtils
, un IfThen
non qualificato si risolverà nella funzione corretta in base agli argomenti e indipendentemente dall'ordine delle unità nell'elenco uses
.
Nice - Non ho mai saputo che potrebbe essere usato per risolvere questi problemi! –