继承(针对 Visual Basic 6.0 用户)
更新:2007 年 11 月
使用继承可从现有类创建新类。继承可通过提供各种类之间的关系结构简化应用程序的设计。它还支持代码重用,因为只需添加新的或不同的类行为。
接口继承
Visual Basic 6.0
Visual Basic 6.0 支持接口继承,界面更改(针对 Visual Basic 6.0 用户)中有更详细的介绍。
Visual Basic 2008
Visual Basic 2008 使用 Interface 语句 (Visual Basic) 和 Implements 语句 来支持接口继承。有关接口的更多信息,请参见 Visual Basic 中的接口。
实现继承
通过实现继承创建新类时,新类将自动获得基类的所有成员和实现。已有的类称为“基类”。新类称为“派生类”。可向类添加其他成员。通过在新类中编写代码可更改基类的行为。这种技术叫做重写。
可以通过继承以下项来创建类:创建的类、添加到项目的引用中的类或 .NET Framework 中的对象。.NET Framework 的许多类通过继承相互关联。例如,TextBox 类继承自 System.Windows.Forms.TextBoxBase 类。
Visual Basic 6.0
Visual Basic 6.0 不支持实现继承。
Visual Basic 2008
在 Visual Basic 2008 中,继承由 Inherits 语句声明。在本例中,派生类 Oak 继承自基类 Tree。
Public Class Oak
Inherits Tree
' Add code here to extend or
' modify the behavior of the Tree class.
End Class
MustInherit 和 NotInheritable
Visual Basic 6.0
在 Visual Basic 6.0 的接口继承中,任何类都可以充当接口基类。不存在阻止任何类充当接口基类的语法。同样,也不存在要求类仅充当接口基类的语法。
Visual Basic 2008
除了实现继承外,Visual Basic 2008 还定义了两个类修饰符:MustInherit 和 NotInheritable。程序员可使用这些修饰符控制应用程序中的继承关系。
类声明上的 MustInherit 修饰符指出类不能被实例化:
Public MustInherit Class BaseClass
End Class
这表示 BaseClass 不能出现在 New 关键字之后。只能对继承自 BaseClass 并且没有 MustInherit 修饰符的类进行实例化。在面向对象的环境和其他面向对象的语言中,MustInherit 类称为“抽象”类。 非 MustInherit 类可以实例化,称为“具体”类。
一个与此相关的概念是密封类,该类不能作为基类。类定义上的 NotInheritable 关键字表示下面的状态:
Public NotInheritable Class DerivedClass
End Class
NotInheritable 类标记了继承层次结构的边缘。
有关更多信息,请参见 Visual Basic 中的继承。
升级建议
将 Visual Basic 6.0 中充当接口的类升级为 Visual Basic 2008 中的接口。请参考来自 Visual Basic 6.0 的基类和派生类示例:
' Contents of class BaseClass
Public Sub BaseMethod()
End Sub
' Contents of class DerivedClass
Implements BaseClass
Private Sub BaseClass_BaseMethod()
End Sub
升级向导产生的升级后的代码:
Option Strict Off
Option Explicit On
Interface _BaseClass
Sub BaseMethod()
End Interface
Friend Class BaseClass
Implements _BaseClass
Public Sub BaseMethod() Implements _BaseClass.BaseMethod
End Sub
End Class
Friend Class DerivedClass
Implements _BaseClass
Private Sub BaseClass_BaseMethod() Implements _BaseClass.BaseMethod
End Sub
End Class
使用继承而不是接口,升级后的代码可修改为:
Friend Class BaseClass
Public Sub BaseMethod()
' Add code here to define BaseMethod.
End Sub
End Class
Friend Class DerivedClass
Inherits BaseClass
End Class
这消除了一层间接引用 - _BaseClass。而且还消除了一个方法定义 - BaseClass_BaseMethod,因为该方法从基类继承,无需再次编码。如果程序员需要派生类具有不同行为,可按如下方式重写 BaseMethod:
Friend Class BaseClass
Public Overridable Sub BaseMethod()
' Add code here to define BaseMethod.
End Sub
End Class
Friend Class DerivedClass
Inherits BaseClass
Public Overrides Sub BaseMethod()
' Add code here to define behavior for DerivedClass.
End Sub
End Class
在升级后的接口中可考虑的一些技巧包括:
用 Inherits 语句替换 Interface 语句。
将基类作为接口而不是作为实现接口的类来实现。有关更多信息,请参见界面更改(针对 Visual Basic 6.0 用户)。
将基类作为 MustInherit 类实现。
将派生类作为 NotInheritable 类实现。