继承(针对 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 还定义了两个类修饰符:MustInheritNotInheritable。程序员可使用这些修饰符控制应用程序中的继承关系。

类声明上的 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 类实现。

请参见

其他资源

Visual Basic 中的继承

Visual Basic 中的接口