In Visual Basic, il sovraccarico dei metodi (overloading) consente di creare più metodi con lo stesso nome ma con parametri diversi (tipi, quantità, ordine). Per il sovraccarico si utilizza la parola chiave Overloads prima della dichiarazione del metodo. Questo aiuta a rendere l'interfaccia della classe più flessibile e conveniente, permettendo di utilizzare lo stesso metodo con diversi set di parametri. Il sovrascrittura (overriding), al contrario, è legato all'ereditarietà e consente di modificare l'implementazione di un metodo della classe base in una classe derivata; per questo si utilizzano le parole chiave Overrides (nella classe derivata) e Overridable (nella classe base).
Esempio di sovraccarico di metodi:
Class MathUtil ' Sovraccarico per la somma di due interi Public Overloads Function Add(a As Integer, b As Integer) As Integer Return a + b End Function ' Sovraccarico per la somma di tre interi Public Overloads Function Add(a As Integer, b As Integer, c As Integer) As Integer Return a + b + c End Function ' Sovraccarico per la somma di due numeri in virgola mobile Public Overloads Function Add(a As Double, b As Double) As Double Return a + b End Function End Class
Domanda: "Si possono sovraccaricare procedure e funzioni in base al tipo di valore restituito? Perché?"
Risposta: No, in Visual Basic il sovraccarico dei metodi è consentito solo in base all'insieme dei parametri (tipo, quantità, ordine). Il sovraccarico in base al tipo di valore restituito non è possibile: se le firme dei metodi differiscono solo per il tipo di risultato, si verificherà un errore di compilazione.
Esempio:
' Questo causerà un errore di compilazione! Overloads Function Foo(x As Integer) As Integer End Function Overloads Function Foo(x As Integer) As String End Function
Storia
Nel progetto di internet banking, uno sviluppatore ha implementato i metodi di validazione degli utenti tramite sovraccarico, ma ha scelto di differenziare solo in base al tipo di valore restituito (ad esempio, uno restituisce Boolean, l'altro String per il messaggio di errore). Questo ha portato a ambiguità nella chiamata del metodo, impedendo la compilazione, e il team ha dovuto urgentemente correggere l'interfaccia, il che ha ritardato il rilascio.
Storia
In un sistema aziendale per la gestione dell'inventario, si è cercato di realizzare un metodo sovraccaricato AddItem, differenziandoli in base al tipo di risultato restituito (ad esempio, uno — risultato dell'aggiunta, l'altro — ID della registrazione aggiunta). Dopo l'integrazione con un'API esterna, i test hanno smesso di compilare, poiché il linguaggio non supporta tale sovraccarico, e si è dovuta rivedere completamente l'architettura dell'interazione.
Storia
In un vecchio progetto per la lavorazione di dati scientifici, hanno cercato di sovraccaricare una funzione in base al tipo di ritorno (una Double, l'altra Decimal). Le istanze di chiamata si sono rivelate indistinguibili per il compilatore, portando a errori runtime inaspettati e doppio lavoro per correggere l'interfaccia della libreria.