Substitution de propriétés et de méthodes

Mise à jour : novembre 2007

Une classe dérivée hérite des propriétés et des méthodes définies dans sa classe de base. Cela est utile parce que vous pouvez réutiliser ces éléments s'ils sont appropriés pour la classe dérivée. Si la propriété ou la méthode dans la classe de base est marquée avec le mot clé Overridable, vous pouvez définir une nouvelle implémentation pour le membre dans la classe dérivée. Utilisez le mot clé Overrides pour occulter le membre en le redéfinissant dans la classe dérivée. Cette opération s'avère utile lorsque vous ne pouvez pas utiliser le membre « tel quel ».

En pratique, les membres substitués sont souvent utilisés pour implémenter le polymorphisme. Pour plus d'informations, consultez Polymorphisme.

Les règles suivantes s'appliquent à la substitution de méthodes :

  • Vous ne pouvez substituer que les membres marqués du mot clé Overridable dans leur classe de base.

  • Par défaut, les propriétés et les méthodes sont NotOverridable.

  • Les membres substitués doivent avoir les mêmes arguments que les membres hérités de la classe de base.

  • La nouvelle implémentation d'un membre peut appeler l'implémentation d'origine dans la classe parente en spécifiant MyBase avant le nom de la méthode.

    Remarque :

    La surcharge, la substitution et l'occultation sont des concepts similaires pouvant être facilement confondus. Pour plus d'informations, consultez Introduction aux objets dans Visual Basic.

Exemple

Supposons que vous souhaitiez définir des classes pour gérer les salaires. Vous pouvez définir une classe générique Payroll qui contient une méthode RunPayroll permettant de calculer les salaires pour une semaine type. Vous pouvez ensuite utiliser Payroll comme une classe de base pour une classe BonusPayroll plus spécialisée qui peut être utilisée lors de la distribution de primes aux employés.

La classe BonusPayroll peut hériter et substituer la méthode PayEmployee définie dans la classe de base Payroll.

L'exemple suivant définit une classe de base Payroll, et une classe dérivée BonusPayroll pour substituer une méthode héritée nommée PayEmployee. Une procédure, RunPayroll, crée et passe ensuite un objet Payroll et un objet BonusPayroll à une fonction, Pay, qui exécute la méthode PayEmployee sur les deux objets.

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

Voir aussi

Concepts

Propriétés et méthodes surchargées

Modificateurs Override

Occultation dans Visual Basic

Autres ressources

Polymorphisme