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