体验Visual Basic.Net的继承和重载



  介绍

  在这个实践练习中,你将会建立一个简单的Visual Basic .NET应用程序。我们将用它来示范继承的概念。

  Microsoft Visual Basic .NET允许开发者定义基类来支持继承。派生类可以继承、扩展基类的属性、方法、事件和数据成员。派生类可以Override基类的方法。所有的类缺省都是可继承的。Form也是类,可以在已存在的Form类的基础上利用继承定义新的Form类。

  继承的语句和修饰符

  Visual Basic .NET 引入了一些语句和修饰符支持继承,下表描述了继承的语句和说明:

  语句/修饰符 描述
Inherits Inherits 语句--指明了当前的类从哪个类继承。Inherits 关键词只用在类和接口中
NotInheritable NotInheritable 修饰符--禁止用作基类
MustInherit MustInherit修饰符--指明不能建立当前类的实例。这个类只能被继承
Overridable  Overridable 修饰符--允许类的一个属性或方法可以被Override。Public 方法缺省是 NotOverridable
Overrides Overrides 修饰符--Override基类的一个属性或方法
NotOverridable NotOverridable 修饰符 (缺省)- -禁止类的一个属性或方法被Override
MustOverride  MustOverride 修饰符--需要继承的类Override的属性或方法。当使用MustOverride 关键词的时候,方法的定义只包括Sub, Function和 Property 语句。要特别强调的是,其他任何语句是不允许没有End Sub, End Function或者 End Property 语句。类中带有MustOverride 方法都必须声明为MustInherit。Public 方法缺省值是NotOverridable
Shadows Shadows 修饰符--允许重新使用被继承的类成员的名字。Shadow不删除继承得来的类的类型成员,它仅仅是使所有被继承的类型成员在派生类中不可使用。Shadow是在派生类中重新声明类成员

 


  以下几个语句和修饰符的组合不被允许:

  · Overridable 和NotOverridable 是绝对互斥的,不能组合。

  · NotOverridable 不能和 Overridable 或者 MustOverride组合。

  · Overrides 意味着Overridable 不能和MustOverride组合。

  · MustOverride 意味着Overridable 不能和NotOverridable组合。

  · MustOverride 方法不能Override其他方法,所以不能和Overrides组合。

  继承实例1

  你将利用Microsoft Visual Studio .NET 集成开发环境(Integrated Development Environment,IDE)建立一个简单的执行程序。

  1. 打开IDE:单击Start,单击Programs,单击Microsoft Visual Studio .NET 7.0,单击Microsoft Visual Studio .NET 7.0。起始页出现了。

  2. 建立新的工程:单击New Project打开新的工程窗口。

  3. 在 Project Types栏里,单击Visual Basic Projects。

  4. 在Templates栏里,单击Empty Project。

  5. 单击OK。

  6. 在工程中添加一个类:在Project菜单,单击Add Class。

  7. 在Name栏里,输入A.vb。

  8. 单击Open,一个空的类如图1所示。

 图一:一个空类

  9. 在Class A 上输入以下代码:

  Imports System
Imports System.Console

  10. 增加以下代码完成Class A:

  Class A
 Public Sub F()
  Console.WriteLine("A.F")
 End Sub
 Public Overridable Sub G()
  Console.WriteLine("A.G")
 End Sub
End Class

  11. 在 Class A下增加以下代码:

  Class B
Inherits A
 Public Shadows Sub F()
  Console.WriteLine("B.F")
 End Sub
 Public Overrides Sub G()
  Console.WriteLine("B.G")
 End Sub
End Class

  在以下的代码段,你声明了两个对象,并且调用他们的方法看结果。

  Class Test
Shared Sub Main()
 Dim b As New B()
 Dim a As A = b
 a.F()
 b.F()
 a.G()
 b.G()
End Sub
End Class

  12. 按 F5 运行应用程序。Output 窗口弹出显示结果,如图二所示:

 图二:继承实例1的输出结果

  注意 b.F() 和b.G()的结果都是意料中的。注意,a.G()调用的是B.G,而不是A.G。这是因为我们允许Class A的方法G可以被Override。实际执行的方法取决于class B的G方法,因为它Override了从class A中继承的方法。这种改变编译时方法的执行的能力使得继承成为面向对象变成中的重要特色。

  13. 单击File,接着单击Close Solution。

  在下个实例里打开IDE。

  继承实例2

  这个例子进一步的说明了继承。

  1. 单击File,单击New,单击Project 打开新的Project 窗口。

  2. 在Project Types栏里,单击Visual Basic Projects,在Templates 栏里,单击Empty Project.

  3. 单击OK。

  4. 在工程中增加一个新的类:在Project菜单,单击Add Class。

  5. 在Name栏里,输入A.vb。

  6. 单击Open。一个空的Class出现。

  7. 将以下代码添加到Class A之上:

  Imports System
Imports System.Console

  8. 增加以下代码完成class A:

  Class A
Public Overridable Sub F()
Console.WriteLine("A.F")
End Sub
End Class

  9. 在Class A之下增加以下代码:

  Class B
Inherits A
Public Overrides Sub F()
 Console.WriteLine("B.F")
End Sub
End Class
Class C
Inherits B
Public Shadows Overridable Sub F()
 Console.WriteLine("C.F")
End Sub
End Class
Class D
Inherits C
Public Overrides Sub F()
 Console.WriteLine("D.F")
End Sub
End Class

  在以下的代码段,你声明了四个对象,并且调用他们的方法看结果:

  Class Test
Shared Sub Main()
Dim d As New D()
Dim a As A = d
Dim b As B = d
Dim c As C = d
a.F()
b.F()
c.F()
d.F()
End Sub
End Class

  10. 按 F5 执行应用程序。Output出现,结果如图3所示:

 

 图三. 继承实例2的输出结果

  注意 在class A 中有一个可以被override方法。在class B 有一个override方法。Class A 和class B 和前一个实例非常相似。Class B 继承class A 并且Override了方法F,另外改变了方法 F。 a.F() 和b.F() 都调用B.F,因为class A方法 F 已经被class B 的方法 F Override。

  在class C 中,方法F被声明为既是一个可以被override方法也是一个shadow 方法。这意味着 这个方法在编译时屏蔽了基类的方法 F,同时它可以被class C的子类Override。Class D 继承class C。class D 中有一个override 方法,它改变了class C 方法 F在运行时的执行。这就是c.F() 和d.F() 都调用 D.F的原因。

  因为方法可以屏蔽(Shadow)被继承的方法, 所以在一个类中可以包含多个具有相同的signature(即函数名,参数和返回值相同)的overridable 方法而不会引起歧义。因为除了那个被直接继承的基类方法外,其他所有的基类的方法都被隐藏而不可访问,从而没有名字冲突。

  如果要调用shadowed overridable 方法,我们可以把类D的实例转为其基类(在本例中A和B)的实例来调用它。

  结语

  当你不看工程文件时,关闭所有的窗口。

  重置操作

  可以通过HOLT1-01Experience Visual Studio .NET.msi 安装包和Reset.vbs 脚本文件清除所有与实验相关的信息。

  按照以下步骤重置你的电脑

  1. 双击HOLT1-01 Experience Visual Studio .NET.msi. 安装想到会出现。

  2. 单击Next。一个题为Program Maintenance页面出现。

  3. 选择Remove, 接着单击Next。一个题为Remove the Program 窗口出现。

  4. 单击Remove。 这将删除所有的与实验相关的文件夹和文件。

  5. 单击Finish。

  你现在将删除Start菜单中快捷方式。

  6. 双击Reset.vbs。当Windows Script Host 窗口出现时,单击 OK。

  再次运行这个实验:

  1. 安装HOLT1-01 Experience Visual Studio .NET.MSI.

  2. 执行 Setup.vbs.

 

本文作者:
« 
» 
快速导航

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3