Sobrescrevendo propriedades e métodos
Um classe derivada herda as propriedades e métodos definidos no sua classe base.Isso é útil porque você pode reutilizar esses itens quando apropriado para a classe derivada.Se a propriedade ou método no classe base é marcado com a palavra-chave Overridable, você pode definir uma nova implementação para o membro a classe derivada.Use a palavra-chave Overrides para sombrear o membro redefinindo-o na classe derivada.Isso é útil quando você não pode usar o membro da forma que está.
Na prática, membros substituídos são geralmente usados para implementar polimorfismo.Para obter mais informações, consulte Polimorfismo.
As seguintes regras se aplicam a métodos substituintes.
Você pode substituir somente os membros que são marcados com a palavra-chave Overridable em suas classe base.
Por padrão, propriedades e métodos são NotOverridable.
Membros substituídos devem ter os mesmos argumentos como os membros herdados a partir de classe base.
A nova implementação de um membro pode chamar a implementação original na classe pai especificando MyBase antes do nome do método.
Observação: Sobrecarga, substituição e sombra são conceitos semelhantes que podem ser fáceis de confundir.Para obter mais informações, consulte Introdução a Objetos no Visual Basic.
Exemplo
Suponha que você queira definir classes para tratar a folha de pagamento.Você pode definir uma classe Payroll genérica que contém um método RunPayroll que calcula da folha de pagamento de uma semana típica.Você poderia então utilizar Payroll como uma classe base de uma classe BonusPayroll mais especializada, que pode ser usada ao distribuir bônus aos funcionários.
A classe BonusPayroll pode herdar e substituir, o método PayEmployee definido na classe base Payroll.
O exemplo a seguir define uma classe base, Payroll, e um classe derivada, BonusPayroll, que substitui um método PayEmployee herdado.Um procedimento, RunPayroll, cria e, em seguida, passa um objeto Payroll e um objeto BonusPayroll para uma função, Pay,que executa o método PayEmployee dos dois 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
Consulte também
Conceitos
Propriedades e métodos sobrecarregados