Metodi e proprietà di overload (Visual Basic)
Per overload si intende la creazione di più routine, costruttori di istanza o proprietà con lo stesso nome all'interno di una classe ma con diversi tipi di argomento.
Utilizzo dell'overload
L'overload è particolarmente utile quando il modello a oggetti impone l'utilizzo di nomi identici per routine che utilizzano tipi di dati diversi. Una classe che consente la visualizzazione di diversi tipi di dati ad esempio può presentare routine Display 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 l'overload, sarebbe necessario creare nomi distinti per ciascuna routine, anche se tutte svolgono un'azione dello stesso tipo, come indicato 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
L'overload semplifica l'utilizzo di proprietà e metodi in quanto consente di utilizzare diversi tipi di dati. Il metodo Display di overload esaminato in precedenza ad esempio può essere chiamato da una qualsiasi delle seguenti righe di codice:
' 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, in Visual Basic verrà chiamata la routine corretta in base ai tipi di dati dei parametri specificati.
Regole per l'overload
Per creare un membro in overload per una classe, aggiungere due o più proprietà o metodi con lo stesso nome. Ad eccezione dei membri derivati in overload, è necessario che a ogni membro in overload siano associati diversi elenchi di parametri e non è possibile utilizzare i seguenti elementi come caratteristica di differenziazione quando si esegue l'overload di una proprietà o una routine:
Modificatori, quali ByVal o ByRef, applicabili a un membro o ai parametri del membro.
Nomi di parametri
Tipi di valori restituiti delle routine
La parola chiave Overloads è facoltativa quando si esegue l'overload, ma se tale parola chiave viene utilizzata da un membro in overload, è necessario che sia specificata anche da tutti gli altri membri in overload con lo stesso nome.
Le classi derivate sono in grado di eseguire l'overload di membri ereditati con membri a cui sono associati identici parametri e tipi di parametri. Questo processo è noto come shadowing in base al nome e alla firma. Se la parola chiave Overloads viene utilizzata quando si esegue lo shadowing in base al nome e alla firma, l'implementazione del membro presente nella classe derivata verrà utilizzata al posto dell'implementazione presente nella classe di base e tutti gli altri overload per tale membro risulteranno 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 a cui sono associati identici parametri e tipi di parametri, l'overload verrà definito shadowing in base al nome. Lo shadowing in base al nome consente di sostituire l'implementazione ereditata di un membro e rende tutti gli altri overload non disponibili per le istanze della classe derivata e i relativi discendenti.
Non è possibile utilizzare sia il modificatore Overloads che il modificatore Shadows con lo stesso metodo o proprietà.
Esempio
Nell'esempio che segue vengono creati metodi di overload che accettano rappresentazioni di tipo String o Decimal di un importo in dollari e restituiscono una stringa contenente l'imposta sul fatturato.
Per utilizzare l'esempio che segue per creare un metodo di overload
Aprire un nuovo progetto e aggiungere una classe denominata TaxClass.
Aggiungere il seguente codice 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
Aggiungere la seguente routine al form:
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
Aggiungere un pulsante al form e chiamare la routine ShowTax dall'evento Button1_Click del pulsante.
Eseguire il progetto e scegliere il pulsante sul form per eseguire il test della routine in overload ShowTax.
In fase di esecuzione, la funzione in overload appropriata viene scelta in base ai parametri utilizzati. Quando si sceglie il pulsante, in primo luogo viene chiamato il metodo di overload con un parametro Price di tipo stringa e viene visualizzato un messaggio che indica che il prezzo è una stringa e che l'imposta è pari a $5.12. TaxAmount viene chiamato con un valore Decimal la seconda volta e viene visualizzato un messaggio che indica che il prezzo è un valore Decimal e che l'imposta è pari a $5.12.
Vedere anche
Riferimenti
Concetti
Nozioni fondamentali sull'ereditarietà (Visual Basic)