Override di proprietà e metodi
Aggiornamento: novembre 2007
Una classe derivata eredita le proprietà e i metodi definiti nella rispettiva classe base. Ciò risulta utile in quanto consente di riutilizzare tali elementi quando opportuno per la classe derivata. Se la proprietà o il metodo nella classe base è contrassegnato con la parola chiave Overridable, è possibile definire una nuova implementazione per il membro nella classe derivata. Utilizzare la parola chiave Overrides per nascondere il membro ridefinendolo nella classe derivata. Questa operazione risulta utile quando non è possibile utilizzare il membro così com'è.
In pratica, i membri sottoposti a override sono spesso utilizzati per implementare il polimorfismo. Per ulteriori informazioni, vedere Polimorfismo.
Per eseguire l'override dei metodi vengono adottati i criteri indicati di seguito.
È possibile eseguire l'override solo dei membri contrassegnati con la parola chiave Overridable nella classe base di appartenenza.
Per impostazione predefinita, le proprietà e i metodi sono NotOverridable.
I membri sottoposti a override devono presentare gli stessi argomenti dei membri ereditati dalla classe base.
La nuova implementazione di un membro può chiamare l'implementazione originale nella classe padre specificando MyBase prima del nome del metodo.
Nota: Overload, override e shadow sono concetti simili che possono essere facilmente confusi. Per ulteriori informazioni, vedere Introduzione agli oggetti in Visual Basic.
Esempio
Si supponga di voler definire delle classi per la gestione dello stipendio. È possibile definire una classe Payroll generica contenente un metodo RunPayroll che consente di calcolare lo stipendio di una settimana tipica. Payroll potrà quindi essere utilizzata come classe base per una classe BonusPayroll più specializzata che consenta la distribuzione di bonus ai dipendenti.
La classe BonusPayroll può ereditare il metodo PayEmployee, definito nella classe base Payroll, ed eseguirne l'override.
Nell'esempio seguente viene definita una classe base Payroll, e una classe derivata BonusPayroll, nella quale viene eseguito l'override del metodo ereditato PayEmployee. Attraverso la routine RunPayroll vengono creati e quindi passati un oggetto Payroll e un oggetto BonusPayroll a una funzione denominata Pay, che consente di eseguire il metodo PayEmployee di entrambi gli oggetti.
Const BonusRate As Decimal = 1.45D
Const PayRate As Decimal = 14.75D
Class Payroll
Overridable Function PayEmployee( _
ByVal HoursWorked As Decimal, _
ByVal PayRate As Decimal) _
As Decimal
PayEmployee = HoursWorked * PayRate
End Function
End Class
Class BonusPayroll
Inherits Payroll
Overrides Function PayEmployee( _
ByVal HoursWorked As Decimal, _
ByVal PayRate As Decimal) _
As Decimal
' The following code calls the original method in the base
' class, and then modifies the returned value.
PayEmployee = MyBase.PayEmployee(HoursWorked, PayRate) * BonusRate
End Function
End Class
Sub RunPayroll()
Dim PayrollItem As Payroll = New Payroll
Dim BonusPayrollItem As New BonusPayroll
Dim HoursWorked As Decimal = 40
MsgBox("Normal pay is: " & _
PayrollItem.PayEmployee(HoursWorked, PayRate))
MsgBox("Pay with bonus is: " & _
BonusPayrollItem.PayEmployee(HoursWorked, PayRate))
End Sub
Vedere anche
Concetti
Proprietà in overload e metodi