假设我有以下代码:
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"?
感谢您的帮助!
答案 0 :(得分:0)
问题是,当您引用基类时,使用Shadows
关键字会使您的代码使用基类的变量。由于您使用了多态性并且newEmployee
被定义为NormalEmployee
,因此basepay是基类之一。有关详细信息,请查看here。