读书人

这段代码小弟我都糊涂了帮帮小弟我吧

发布时间: 2011-12-27 22:22:55 作者: rapoo

这段代码我都糊涂了,帮帮我吧!
这段代码我都糊涂了,帮帮我吧!


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

真是糊涂了,这个问题可以说是我最没思路的,请各位务必给我讲一下,
谢谢!!

[解决办法]
这儿没有所谓的重写谁的,自己的方法还是自己的方法。

只不过在调用的时候,根据你所创建的实例,在虚拟表中依次向上查找。

读书人网 >VB Dotnet

热点推荐