Overload della routine (Visual Basic)
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 (Visual Basic) 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 (Visual Basic)
Procedura: chiamare una routine di overload (Visual Basic)
Procedura: eseguire l'overload di una routine che accetta parametri facoltativi (Visual Basic)
Riferimenti
Concetti
Considerazioni sull'overload di routine (Visual Basic)