这段代码我都糊涂了,帮帮我吧!
这段代码我都糊涂了,帮帮我吧!
Public Class Class_1
Public Overridable Function GetMyName() As String
Return "Class_1 "
End Function
Public Function GetMeType() As String
Return Me.GetType.ToString
End Function
End Class
Public Class Class_2
Inherits Class_1
Public Overrides Function GetMyName() As String
Return "Class_2 "
End Function
Public Overridable Function GetMyBassName() As String
Return MyBase.GetMyName
End Function
Public Overridable Function GetMyClassName() As String
Return MyClass.GetMyName
End Function
End Class
Public Class Class_3
Inherits Class_2
Public Overrides Function GetMyName() As String
Return "Class_3 "
End Function
End Class
执行代码:
Dim m_Class_2 As New Class_3
Dim m_String As String
m_String &= "GetMyBassName -- > " & m_Class_2.GetMyBassName & vbCrLf
'结果是:GetMyBassName -- > Class_1
对于以上代码,我的问题是:
1:Class_3 继承Class_2,那么Class_3 就会有Class_2的所有属性和方法(重写的GetMyName除外)
然后再看最后的代码
m_String &= "GetMyBassName -- > " & m_Class_2.GetMyBassName & vbCrLf
'结果是:GetMyBassName -- > Class_1
其中的“m_Class_2.GetMyBassName ”命令,也就是调用Class_3的 Public Overridable Function GetMyBassName() As String
Return MyBase.GetMyName
End Function
因为class_3继承class_2,所以class_3当然有Function GetMyBassName
在其中的方法体中,代码是: Return MyBase.GetMyName
我认为这里的mybase指的是class_2
因为class_3继承class_2
那么Return MyBase.GetMyName中的GetMyName方法指的就是class_2中的GetMyName方法,那为什么还会输出结果:
GetMyBassName -- > Class_1
真是糊涂了,这个问题可以说是我最没思路的,请各位务必给我讲一下,
谢谢!!
[解决办法]
这儿没有所谓的重写谁的,自己的方法还是自己的方法。
只不过在调用的时候,根据你所创建的实例,在虚拟表中依次向上查找。