vb.net - 如何确定 ME 的参考类型?
问题描述
问题:
在下面的代码中,d.UseMe()
执行 Me.testShadow() 的 O/P 在我看来应该是“Shadowing Procedure: From the Derived Class”。但相反,我得到的 O/P 是“来自基类:派生类中的影子过程”。我就为什么我认为应该输出前者提出我的理解。请告诉我哪里出错了。
- d 是指向派生类型对象的派生类类型引用。
- d.UseMe() 在其中执行语句 Me.testShadow()。ME 的行为类似于指向当前实例的对象变量,即“d”指向的对象。因此,ME 的引用属于派生类类型。
- testShadow() 有两个版本,一个在基类中,一个在派生类中的阴影版本。
- 由于 SHADOWS 对引用起作用,并且由于 ME 引用的类型是派生类类型,我期待派生类中的阴影函数会被调用?相反,正在调用基类中的 testShadow()。
我错在哪里?我写的代码如下:
Module Module1
Sub Main()
Dim b As New base()
Dim d As New derived()
d.useMe()
Console.ReadLine()
End Sub
End Module
Public Class base
Public Overridable Function testOverride() As String
Return "Overrideable function: From the base Class"
End Function
Public Function testShadow() As String
Return "From Base class. Shadowing function in inherited class"
End Function
Public Sub useMe()
Console.WriteLine("Me.testOverride() returns: {0}", Me.testOverride())
Console.WriteLine("Me.testShadow() returns: {0}", Me.testShadow)
End Sub
End Class
Public Class derived : Inherits base
Public Overrides Function testOverride() As String
Return "Overriden procedure: From derived class"
End Function
Public Shadows Function testShadow() As String
Return "Shadowing procedure: From derived class"
End Function
End Class
解决方案
覆盖遵循对象的类型,而遮蔽遵循引用的类型。该useMe
方法位于基类中,并且Me
始终是使用它的类的类型,基类也是如此Me
。这意味着Me.testShadow
将执行基类中的方法。
您可以通过考虑它位于可以在任意数量的派生类型中继承的基类这一事实轻松地向自己证明它Me
是类型。base
引用的类型如何Me
根据您调用该方法的派生类型而改变?引用不会在运行时更改类型。它们始终是编译代码时的任何类型。该useMe
方法是在base
类中编写的,因此它是类型base
并且将始终是该类型。