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

Modificadores de Substituição

Sombreamento em Visual Basic

Outros recursos

Polimorfismo