Overload della routine

Aggiornamento: novembre 2007

Eseguire l'overload di una routine significa definirla in più versioni, utilizzando lo stesso nome ma diversi elenchi di parametri. Lo scopo dell'overload è definire più versioni strettamente correlate di una routine senza doverle distinguere per nome. Questa operazione richiede la modifica dell'elenco di parametri.

Regole per l'overload

Quando si esegue l'overload di una routine, è necessario rispettare le seguenti regole:

  • Stesso nome. È necessario che ogni versione di overload utilizzi lo stesso nome di routine.

  • Firma diversa. È necessario che ogni versione di overload sia diversa dalle altre per almeno uno degli aspetti che seguono:

    • Numero di parametri

    • Ordine dei parametri

    • Tipi di dati dei parametri

    • Numero dei parametri di tipo (per una routine generica)

    • Tipo restituito (solo per un operatore di conversione)

    L'insieme del nome di routine e degli elementi precedenti viene definito firma della routine. Quando si chiama una routine di overload, il compilatore utilizza la firma per verificare la corrispondenza tra la chiamata e la definizione.

  • Elementi che non fanno parte della firma. Non è possibile eseguire l'overload di una routine senza modificare la firma. In particolare, non è possibile eseguire l'overload di una routine modificando solo uno o più degli elementi che seguono:

    • Parole chiave di modificatori di routine, come Public, Shared e Static

    • Nomi dei parametri o dei parametri di tipo

    • Vincoli dei parametri di tipo (per una routine generica)

    • Parole chiave di modificatori di parametro, come ByRef e Optional

    • Eventuale restituzione di un valore

    • Tipo di dati del valore restituito (fatta eccezione per gli operatori di conversione)

    Gli elementi riportati nell'elenco precedente non fanno parte della firma. Sebbene non sia possibile utilizzarli per distinguere le versioni di overload, è possibile servirsene in modo vario nelle differenti versioni di overload adeguatamente differenziate dalle rispettive firme.

  • Argomenti ad associazione tardiva. Se si desidera passare una variabile oggetto ad associazione tardiva a una versione di overload, è necessario dichiarare il parametro appropriato come Object.

Più versioni di una routine

Si supponga di scrivere una routine Sub per inviare una transazione relativa al saldo di un cliente e che si desideri potersi riferire al cliente tramite nome o tramite numero di conto. Per rispondere a questa esigenza, è possibile definire due diverse routine Sub, come nell'esempio che segue:

Sub postName(ByVal custName As String, ByVal amount As Single)
    ' Insert code to access customer record by customer name.
End Sub
Sub postAcct(ByVal custAcct As Integer, ByVal amount As Single)
    ' Insert code to access customer record by account number.
End Sub

Versioni di overload

Un'alternativa consiste nell'esecuzione dell'overload di un singolo nome di routine. È possibile utilizzare la parola chiave Overloads per definire una versione della routine per ogni elenco di parametri nel seguente modo:

Overloads Sub post(ByVal custName As String, ByVal amount As Single)
    ' Insert code to access customer record by customer name.
End Sub
Overloads Sub post(ByVal custAcct As Integer, ByVal amount As Single)
    ' Insert code to access customer record by account number.
End Sub

Overload aggiuntivi

Se si desidera inoltre accettare l'importo di una transazione in Decimal o in Single, è possibile eseguire l'ulteriore overload di post per consentire tale variazione. Se viene eseguita questa operazione per ognuno degli overload dell'esempio precedente, si ottengono quattro routine Sub, tutte con lo stesso nome ma con quattro diverse firme.

Vantaggi dell'overload

Il vantaggio dell'esecuzione dell'overload di una routine è rappresentato dalla flessibilità della chiamata. Per utilizzare la routine post dichiarata nell'esempio precedente, il codice chiamante può ottenere l'identificazione del cliente in forma di String o di Integer e quindi chiamare la stessa routine in entrambi i casi. Questa condizione è illustrata nell'esempio che segue.

Imports MSVB = Microsoft.VisualBasic
Dim customer As String
Dim accountNum As Integer
Dim amount As Single
customer = MSVB.Interaction.InputBox("Enter customer name or number")
amount = MSVB.Interaction.InputBox("Enter transaction amount")
Try
    accountNum = CInt(customer)
    Call post(accountNum, amount)
Catch
    Call post(customer, amount)
End Try

Vedere anche

Attività

Procedura: definire più versioni di una routine

Procedura: chiamare una routine di overload

Procedura: overload di una routine che accetta parametri facoltativi

Procedura: eseguire l'overload di una routine che accetta un numero indefinito di parametri

Concetti

Routine in Visual Basic

Considerazioni sull'overload di routine

Risoluzione dell'overload

Tipi generici in Visual Basic

Riferimenti

Overloads