vb.net重载与隐藏:VB.NET的旅( 6)—重载和隐藏

  大李坐在转椅上左右晃动着手中个硬币在他指间灵巧地翻滚着“hi, Henry你对重写和重载意思理解是如何样呢?”

  我正盯着他手中硬币发愣呢“哦重写就是您刚才举举例中在派生类中用Overrides重新编写有Overridable标识基类思路方法或属性;重载么就是我们可以用同样名称个类中用区别参数列表来创建多个思路方法和属性时就可以适应区别参数类型要求

  “在个类中创建?”大李左眉向上我就知道我可能说错了但是好象没有说错什么呀

  “那好你看这样写法会有什么结果?”

Public Class CBaseHenry 
 
  Public Sub oldY 
 
    Console.WriteLine("基类oldY思路方法") 
 
  End Sub 
 
End Class 
 
Public Class CDerivedHenry 
 
  Inherits CBaseHenry 
 
  Public Overloads Sub oldY(ByVal j As Integer) 
 
    Console.WriteLine("派生类oldY思路方法") 
 
  End Sub 
 
End Class 
 
Public Sub Main 
 
  Dim obj As CDerivedHenry = New CDerivedHenry 


  然后大李写了obj.oldY这时出现智能感知菜单上出现了参数列表:



  “咦第 2个oldY无参数过程签名应该是基类定义为什么在派生类例子中也会出现呀!”我不由好奇起来

  “没错还记得我上次曾显式编写构造事吗?我用了个mybase.用于继承下基类性质现在没有写其实是种默认隐式”大李说我就明白了其实现在派生类应该是内含两个oldY思路方法了无参数oldY其实就是基类思路方法是由于Overloads和Mybase.双重作用影响

  “那你再看这样变化情况”大李象是看出我已经明白了这个问题他在派生类中添加了个用Overloads标识和基类形式无参数oldY

Public Class CBaseHenry 
 
  Public Sub oldY 
 
    Console.WriteLine("基类oldY思路方法") 
 
  End Sub 
 
End Class 
 
Public Class CDerivedHenry 
 
  Inherits CBaseHenry 
 
  Public Overloads Sub oldY(ByVal j As Integer) 
 
    Console.WriteLine("派生类oldY思路方法1") 
 
End Sub 
 
  Public Sub oldY 
 
    Console.WriteLine("派生类oldY思路方法2") 
 
  End Sub 
 
End Class 
 
Public Sub Main 
 
  Dim obj As CDerivedHenry = New CDerivedHenry 
 
  obj.oldY 
 
End Sub 


  “好现在你再说说看现在obj.oldY运行结果会打印出什么?”大李手按在F5运行键上问我

  “应该是派生类不对基类派生类……”我下子就晕了

  “呵呵”大李也不禁发笑起来然后点击了下F5键结果是:

派生类oldY思路方法2 

  “这就叫隐藏我们用overloads方式隐藏了基类同名思路方法以防用户发生混淆般来说隐藏有两种情况种是通过范围来实现比如你定义个全局变量x但在个思路方法中你又定义了个局部变量x在思路方法中使用x时使用是局部变量也就是用局部变量x在思路方法中隐藏了全局变量x种情况就是通过继承来隐藏思路方法么除了刚才用overloads还可以用Shadows关键字来实现

  “Shadows?阴影?倒是很贴切名字这个是如何用呢?”我兴趣由然而生

  “Shadows功能很强”说着大李又开始修改刚才代码了

Public Class CBaseHenry 
 
  Public Sub oldY 
 
    Console.WriteLine("基类oldY思路方法") 
 
  End Sub 
 
End Class 
 
Public Class CDerivedHenry 
 
  Inherits CBaseHenry 
 
  Public Shadows Sub oldY(ByVal j As Integer) 
 
    Console.WriteLine("派生类oldY思路方法") 
 
  End Sub 
 
End Class 
 
Public Sub Main 
 
  Dim obj As CDerivedHenry = New CDerivedHenry


  再写到obj.oldY时出现智能感知菜单上就剩下个思路方法了



  “哈基类思路方法看不到了但是这和重写效果岂不是样了吗?”我不由地又想起个问题如果是作用要Shadows干什么呀



  “还是有区别”大李开始扳着指头数起来“最明显区别在于隐藏适用于任何元素类型你可以在派生类中用Public Shadows oldY as Integer来隐藏基类oldY思路方法;而重写只能适用于思路方法和属性而且声明参数和修饰符都要求完全

  “还要注意当派生类又派生出个子类时重写和隐藏都会被继承下去当然如果在派生类中是用private来修饰Shadows成员子类就会继承它基类成员了

  “我倒是感觉现在VB.NET对继承处理功能真很强大有继承对于编程者来说是件好事”我不由感叹道

  “不错继承层次体系是有很多好处但是事物总是有其双面性继承也有不少问题其中最麻烦就是‘脆弱基类’”大李紧锁眉头认真地说

  “哦什么叫‘脆弱基类’?”我不解地问



Tags:  vb.net重载与隐藏

延伸阅读

最新评论

发表评论