Invalidar propiedades y métodos

Actualización: noviembre 2007

Una clase derivada hereda las propiedades y métodos definidos en su clase base. Esto es útil porque puede reutilizar estos elementos cuando son adecuados para la clase derivada. Si la propiedad o método en la clase base está marcada con la palabra clave Overridable, puede definir una nueva implementación para el miembro en la clase derivada. Utilice la palabra clave Overrides para sombrear el miembro volviéndolo a definir en la clase derivada. Esto es útil cuando no puede utilizar el miembro "tal cual".

En la práctica, los miembros reemplazados suelen utilizarse para implementar el polimorfismo. Para obtener más información, consulte Polimorfismo.

Las siguientes reglas se aplican a los métodos de reemplazo.

  • Sólo se pueden reemplazar miembros que estén marcados con la palabra clave Overridable en la clase base.

  • De forma predeterminada, las propiedades y los métodos son NotOverridable.

  • Los miembros reemplazados deben tener los mismos argumentos que los miembros heredados de la clase base.

  • La nueva implementación de un miembro puede llamar a la implementación original de la clase primaria mediante la especificación de MyBase antes del nombre de método.

    Nota:

    La sobrecarga, el reemplazo y el sombreado son conceptos similares que pueden confundirse fácilmente. Para obtener más información, consulte Introducción a los objetos en Visual Basic.

Ejemplo

Suponga que desea definir clases para controlar la nómina. Podría definir una clase genérica Payroll que contenga un método RunPayroll para calcular la nómina de una semana típica. Podría utilizar Payroll como clase base de una clase más especializada BonusPayroll que se utilizaría para distribuir bonificaciones entre los empleados.

La clase BonusPayroll puede heredar y reemplazar al método PayEmployee definido en la clase base Payroll.

En el siguiente ejemplo se define una clase base, Payroll, y una clase derivada, BonusPayroll, que reemplaza a un método heredado, PayEmployee. Un procedimiento, RunPayroll crea y luego pasa un objeto Payroll y un objeto BonusPayroll a una función, Pay, que ejecuta el método PayEmployee de ambos objetos.

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

Vea también

Conceptos

Propiedades y métodos sobrecargados

Reemplazar modificadores

Sombrear en Visual Basic

Otros recursos

Polimorfismo