首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

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

2011-12-27 
这段代码我都糊涂了,帮帮我吧!这段代码我都糊涂了,帮帮我吧!PublicClassClass_1PublicOverridableFunction

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


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

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

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

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

热点排行