Condividi tramite


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

Modificatori di override

Shadowing in Visual Basic

Altre risorse

Polimorfismo