在重写方法中使用阴影方法/字段

时间:2015-03-17 04:43:00

标签: vb.net oop

假设我有以下代码:

Class NormalEmployee
     Protected pay As Decimal;
     Protected Shared basePay As Decimal = 300D
     Protected Overridable Sub UpdatePay()
         pay = basePay + .....do something......
     End Sub
End Class

Class SeniorNormalEmployee
  Inherits Normal Employee
    Protected Shared Shadows basePay As Decimal = 500D;
    Protected Overrides Sub UpdatePay()
         pay = basePay + .....do something different....
    End Sub
End Class

Function Main() As Integer
    Dim newEmployee As NormalEmployee = New SeniorNormalEmployee()
    newEmployee.CalculatePay()
    return 0
End Function

我知道由于多态性,我的基类中的CalculatePay()将被调用。我的问题是:为什么CalculatePay()使用基类中的basePay而不是派生类?该对象存储在基类" container"中,所以即使它使用方法的派生类版本,当它去检查basePay时它不应该查看基类&# 39; s版本?

此外,从覆盖方法调用阴影方法时,此行为是否相同?有没有办法制作一个字段" Overridable"?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

问题是,当您引用基类时,使用Shadows关键字会使您的代码使用基类的变量。由于您使用了多态性并且newEmployee被定义为NormalEmployee,因此basepay是基类之一。有关详细信息,请查看here