Condividi tramite


Proprietà e metodi sovraccarichi (Visual Basic)

Il sovraccarico è la creazione di più metodi, costruttori di istanza o proprietà in una classe con lo stesso nome ma tipi di argomento diversi.

Sovraccarico dell'uso

L'overload è particolarmente utile quando il modello a oggetti determina l'uso di nomi identici per le procedure che operano su tipi di dati diversi. Ad esempio, una classe in grado di visualizzare diversi tipi di dati potrebbe avere Display procedure simili alle seguenti:

Overloads Sub Display(ByVal theChar As Char)
    ' Add code that displays Char data.
End Sub
Overloads Sub Display(ByVal theInteger As Integer)
    ' Add code that displays Integer data.
End Sub
Overloads Sub Display(ByVal theDouble As Double)
    ' Add code that displays Double data.
End Sub

Senza sovraccaricare, dovresti creare nomi distinti per ogni procedura, anche se svolgono la stessa funzione, come mostrato di seguito.

Sub DisplayChar(ByVal theChar As Char)
    ' Add code that displays Char data.
End Sub
Sub DisplayInt(ByVal theInteger As Integer)
    ' Add code that displays Integer data.
End Sub
Sub DisplayDouble(ByVal theDouble As Double)
    ' Add code that displays Double data.
End Sub

Il sovraccarico rende più facile l'uso di proprietà o metodi perché permette di scegliere tra diversi tipi di dati utilizzabili. Ad esempio, il metodo Display overload descritto in precedenza può essere chiamato con una delle righe di codice seguenti.

' Call Display with a literal of type Char.
Display("9"c)
' Call Display with a literal of type Integer.
Display(9)
' Call Display with a literal of type Double.
Display(9.9R)

In fase di esecuzione, Visual Basic chiama la procedura corretta in base ai tipi di dati dei parametri specificati.

Regole di sovraccarico

Si crea un membro sovraccaricato per una classe aggiungendo due o più proprietà o metodi con lo stesso nome. Ad eccezione dei membri derivati sovraccaricati, ciascun membro sovraccarico deve avere elenchi di parametri diversi e i seguenti elementi non possono essere utilizzati come criterio di distinzione quando si esegue l'overload di una proprietà o di una procedura:

  • Modificatori, ad esempio ByVal o ByRef, che si applicano a un membro o parametri del membro.

  • Nomi dei parametri

  • Tipi restituiti di procedure

La Overloads parola chiave è facoltativa durante l'overload, ma se un membro di overload usa la Overloads parola chiave , tutti gli altri membri di overload con lo stesso nome devono specificare anche questa parola chiave.

Le classi derivate possono sovrascrivere membri ereditati con altri membri aventi parametri e tipi di parametro identici, un processo noto come shadowing per nome e firma. Se la parola chiave Overloads viene usata per l'oscuramento per nome e firma, l'implementazione del membro della classe derivata verrà usata anziché quella nella classe base. Inoltre, tutti gli altri overload per tale membro saranno disponibili per le istanze della classe derivata.

Se la parola chiave Overloads viene omessa quando si esegue l'overload di un membro ereditato con un membro con parametri e tipi di parametro identici, allora l'overload viene chiamato shadowing per nome. Lo shadowing per nome sostituisce l'implementazione ereditata di un membro e rende tutti gli altri overload non disponibili per le istanze della classe derivata e i suoi discendenti.

I Overloads modificatori e Shadows non possono essere usati entrambi con la stessa proprietà o metodo.

Esempio

Nell'esempio seguente vengono creati metodi sovraccaricati che accettano una rappresentazione di un importo in dollari mediante String o Decimal e restituiscono una stringa contenente l'imposta sulle vendite.

Per utilizzare questo esempio per creare un metodo sovraccarico

  1. Aprire un nuovo progetto e aggiungere una classe denominata TaxClass.

  2. Aggiungere il codice seguente alla classe TaxClass.

    Public Class TaxClass
        Overloads Function TaxAmount(ByVal decPrice As Decimal,
             ByVal TaxRate As Single) As String
            TaxAmount = "Price is a Decimal. Tax is $" &
               (CStr(decPrice * TaxRate))
        End Function
    
        Overloads Function TaxAmount(ByVal strPrice As String,
              ByVal TaxRate As Single) As String
            TaxAmount = "Price is a String. Tax is $" &
               CStr((CDec(strPrice) * TaxRate))
        End Function
    End Class
    
  3. Aggiungere la procedura seguente al modulo.

    Sub ShowTax()
        ' 8% tax rate.
        Const TaxRate As Single = 0.08
        ' $64.00 Purchase as a String.
        Dim strPrice As String = "64.00"
        ' $64.00 Purchase as a Decimal.
        Dim decPrice As Decimal = 64
        Dim aclass As New TaxClass
        'Call the same method with two different kinds of data.
        MsgBox(aclass.TaxAmount(strPrice, TaxRate))
        MsgBox(aclass.TaxAmount(decPrice, TaxRate))
    End Sub
    
  4. Aggiungi un pulsante al modulo e chiama la ShowTax procedura dall'evento Button1_Click del pulsante.

  5. Eseguire il progetto e fare clic sul pulsante nel modulo per testare la routine di ShowTax overload.

In fase di esecuzione, il compilatore sceglie la funzione di overload appropriata che corrisponde ai parametri usati. Quando si fa clic sul pulsante, il metodo di overload viene chiamato per primo con un Price parametro che è una stringa e il messaggio "Price is a String. Viene visualizzata la tassa di $ 5,12. TaxAmount viene chiamato la seconda volta con un valore di Decimal e il messaggio "Price è un decimale". Viene visualizzata la tassa di $ 5,12.

Vedere anche