Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Il sovraccarico di una procedura significa definirla in più versioni, usando lo stesso nome ma elenchi di parametri diversi. Lo scopo dell'overload è definire diverse versioni strettamente correlate di una routine senza doverle distinguere in base al nome. A tale scopo, variano l'elenco di parametri.
Norme sul sovraccarico
Quando si esegue l'overload di una procedura, si applicano le regole seguenti:
Stesso nome. Ogni versione di sovraccarico deve usare lo stesso nome di procedura.
Firma diversa. Ogni versione sovraccarica deve essere diversa da tutte le altre versioni sovraccariche in almeno uno dei seguenti aspetti:
Numero di parametri
Ordine dei parametri
Tipi di dati dei parametri
Numero di parametri di tipo (per una procedura generica)
Tipo di ritorno (solo per un operatore di conversione)
Insieme al nome della routine, gli elementi precedenti vengono denominati collettivamente la firma della procedura. Quando si chiama una routine di overload, il compilatore usa la firma per verificare che la chiamata corrisponda correttamente alla definizione.
Elementi che non fanno parte della firma. Non è possibile eseguire l'overload di una routine senza variare la firma. In particolare, non è possibile eseguire l'overload di una routine variando solo uno o più degli elementi seguenti:
Parole chiave del modificatore di routine, ad esempio
Public
,Shared
eStatic
Nomi di parametri o parametri di tipo
Vincoli di parametro di tipo (per una routine generica)
Parole chiave del modificatore di parametri, ad esempio
ByRef
eOptional
Indica se restituisce un valore
Tipo di dati del valore restituito (ad eccezione di un operatore di conversione)
Gli elementi nell'elenco precedente non fanno parte della firma. Pur non potendo usarli per distinguere le versioni sovraccariche, è possibile variarle tra le versioni correttamente differenziate in base alle relative specifiche.
Late-Bound Argomenti. Se si intende passare una variabile oggetto legata tardivamente a una versione sovraccaricata, è necessario dichiarare il parametro appropriato come Object.
Più versioni di una routine
Si supponga di scrivere una Sub
procedura per pubblicare una transazione rispetto al saldo di un cliente e di poter fare riferimento al cliente in base al nome o al numero di conto. Per soddisfare questo problema, è possibile definire due procedure diverse Sub
, come nell'esempio seguente:
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 sovraccariche
Un'alternativa consiste nel sovraccaricare un singolo nome di procedura. È possibile usare la parola chiave Overloads per definire una versione della procedura per ogni elenco di parametri, come indicato di seguito:
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
Sovraccarichi aggiuntivi
Se si vuole anche accettare un importo della transazione in Decimal
o Single
, è possibile eseguire un ulteriore overload post
per consentire questa variante. Se si esegue questa operazione a ognuno degli overload nell'esempio precedente, si avranno quattro Sub
procedure, tutte con lo stesso nome ma con quattro firme diverse.
Vantaggi del sovraccarico
Il vantaggio del sovraccarico di una procedura è la flessibilità della chiamata. Per usare la post
procedura dichiarata nell'esempio precedente, il codice chiamante può ottenere l'identificazione del cliente come un String
o un Integer
, e poi chiamare la stessa procedura in entrambi i casi. L'esempio seguente illustra questi concetti.
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
- Procedure
- Procedura: Definire più versioni di una routine
- Come chiamare una procedura sovraccaricata
- Procedura: Sovraccaricare una procedura che accetta parametri facoltativi
- Procedura: Eseguire l'overload di una routine che accetta un numero indefinito di parametri
- considerazioni relative alle procedure di sovraccarico
- Risoluzione del sovraccarico
- Sovraccarichi
- Tipi generici in Visual Basic