2012-06-09 24 views

risposta

18

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.

+3

Nice - Non ho mai saputo che potrebbe essere usato per risolvere questi problemi! –

Problemi correlati