VB.NET的旅( 5)—类的继承

  “类继承?”大李点点头“以前很多人批评VB功能不完善时都会加上这个条件但是现在VB.NET中已经是比较完善面向对象编程思路方法了刚才我们也提到过类和 VB.NET 结构类似让我们可以定义封装组相关项数据类型然而和结构个重要区别就是VB.NET 类可以继承和扩展其他类特性作为新类基础类称为‘基类’从基类派生类称为‘派生类’派生类继承基类中定义所有字段、属性、思路方法和事件你看我们只要对类进行次开发和调试就可以将其作为其他类基础重复使用

  “类继承概念我学过在VB.NET中是如何来实际演练呢?”我还是坚持着问

  “我写段代码给你看下吧俗话不是说百闻不如见吗?”大李调侃了两句噼噼啪啪地开始敲打起键盘来:

Public Class CBaseHenry 
 
  Private x As Integer = 10 
 
  Protected y As Integer 
 
  Sub New 
 
    Console.WriteLine("基类构造") 
 
  End Sub 
 
  Protected Overrides Sub Finalize 
 
    Console.WriteLine("基类析构") 
 
   MyBase.Finalize 
 
  End Sub 
 
Public Overridable Function GetY(ByVal x As Integer) As Integer 
 
  Me.y = me.x + x ‘private类型me.x只能在基类中使用 
 
    Console.WriteLine("基类GetY思路方法结果为:" & Me.y) 
 
    Return Me.y 
 
  End Function 
 
  Public Sub OldY 
 
    Console.WriteLine("基类OldY思路方法") 
 
End Sub 
 
End Class 


  “你看这是个基类我再给你写个继承自该类派生类”他边说边继续写:

Public Class CDerivedHenry 
 
  Inherits CBaseHenry 
 
  Sub New 
 
    MyBase.New ‘注意:这句话要放在sub内句 
 
    Console.WriteLine("派生类构造") 
 
  End Sub 
 
  Protected Overrides Sub Finalize 
 
    Console.WriteLine("派生类析构") 
 
    MyBase.Finalize 
 
  End Sub 
 
  Public Overrides Function GetY(ByVal x As Integer) As Integer 
 
    Me.y = x * 10 ‘protected类型me.y却可以在派生类中使用 
 
    Console.WriteLine("派生类GetY思路方法结果为:" & Me.y) 
 
    Return Me.y 
 
  End Function 
 
  Public Sub NewY 
 
    Console.WriteLine("派生类新思路方法") 
 
  End Sub 
 
End Class 


  “你看清了吧我们通过声明Inherits关键字来标识该类基类是谁如果没有标识比如CBaseHenryVB.Net就会视其为派生自Object基类这是种隐式继承和结构是隐式继承自ValueType 类方式是”大李指着屏幕跟我解说着

  “那这些overrides和overload标识是什么意思呀?”我隐隐感觉到它们意义却没法清楚地说出来

  “我们使用继承也要允许派生类中某些属性或思路方法有和基类区别行为我们想‘重写’它但基类也得要同意你才能重写呀否则不就会发生命名冲突了吗?派生类对象是可以使用基类公用成员那如何知道哪些基类思路方法和属性是被派生类重写了呢?所以就必须有个约定:我们在基类中用Overridable修饰符来标识允许基类中属性或思路方法在其派生类中被重写没有标识其实就是默认为有NotOverridable修饰符来隐式地标识用于提醒编译器该属性或思路方法不可被重写;然后在派生类重写时我们就用Overrides修饰符来标识哪些是重写自基类中定义 Overridable 属性或思路方法”大李娓娓道来“我们来演练下对派生类操作吧

Public Sub Main 
 
  Dim obj As CDerivedHenry = New CDerivedHenry 
 
  obj.GetY(4)  '派生类GetY思路方法 
 
  obj.OldY   '基类oldY思路方法 
 
  obj.NewY   '派生类NewY思路方法 
 
End Sub 


  然后大李按了下F5键在“输出”窗口中就出现了如下运行结果:

  基类构造          ‘开始运行New CDerivedHenry 
 
  派生类构造 
 
  派生类GetY思路方法结果为:40  ‘obj.GetY(4)运行结果=4*10不等于基类(4+10) 
 
  基类OldY思路方法        ‘obj.OldY运行结果 
 
  派生类新思路方法        ‘obj.NewY运行结果 
 
  派生类析构 
 
  基类析构 


  “你看你只在Main中例子化了个派生类对象为什么先会出现‘基类构造’?”大李问

  “这个么”我开始在代码中查看起来“是这句了”我手指着派生类里这段代码:

Sub New 
 
    MyBase.New ‘注意:这句话要放在sub内句 
 
    Console.WriteLine("派生类构造") 
 
End Sub 


  “没错我们必须要注意这就是派生类构造和析构都必须重新编写New 构造般用于打开文件、连接到数据库、化变量以及处理任何需要在可使用对象前完成其他任务我们必须在Sub New 构造行代码使用语句 MyBase.New类层次结构中该类基类构造以获得基类性质析构则是在Sub Finalize中执行完对派生类清理任务如保存状态信息、关闭文件和和数据库连接以及执行在释放对象前必须完成其他任务的后在析构最后句使用语句 MyBase.Finalize 显式其基类 Sub Finalize 思路方法以析构MyBase.New构造内容所以你从运行结果中也可以很清楚看出这顺序”大李敲击着屏幕象是给我提个醒



  “明白了我会记着”我诚恳地点头回应着

  大李突然想起了什么抬头对我说:“讲到类继承我们还得看下重载和隐藏问题



Tags: 

延伸阅读

最新评论

发表评论