Condividi tramite


Sovraccarico delle procedure (Visual Basic)

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, Sharede Static

    • 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 e Optional

    • 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