MustInherit (Visual Basic)

指定类只能作为基类使用,并且不能直接从其中创建对象。

注解

基类(也称为抽象类)的目的是定义从它派生的所有类共有的功能。 这使派生类不必重新定义公共元素。 在某些情况下,这种通用功能还不够完整,无法生成可用的对象,并且每个派生类都定义了缺失的功能。 在这种情况下,你希望使用代码仅从派生类创建对象。 你在基类上使用 MustInherit 来强制执行此操作。

MustInherit 类的另一个用途是将变量限制为一组相关的类。 你可以定义一个基类并从中派生所有这些相关的类。 基类不需要提供所有派生类共有的任何功能,但它可以充当为变量赋值的筛选器。 如果你的使用代码将一个变量声明为基类,则 Visual Basic 允许你仅将一个派生类中的一个对象分配给该变量。

.NET Framework 定义了几个 MustInherit 类,其中包括 ArrayEnumValueTypeValueType 是限制变量的基类的示例。 所有值类型都派生自 ValueType。 如果将变量声明为 ValueType,则只能为该变量分配值类型。

规则

  • 声明上下文。 只能在 Class 语句中使用 MustInherit

  • 组合修饰符。 不能在同一过程声明中同时指定 MustInheritNotInheritable

示例

以下示例说明了强制继承和强制重写。 基类 shape 定义了一个变量 acrossLine。 类 circlesquare 派生自 shape。 这两个类继承了 acrossLine 的定义,但这两个类必须定义函数 area,因为每种形状的计算都不同。

Public MustInherit Class shape
    Public acrossLine As Double
    Public MustOverride Function area() As Double
End Class
Public Class circle : Inherits shape
    Public Overrides Function area() As Double
        Return Math.PI * acrossLine
    End Function
End Class
Public Class square : Inherits shape
    Public Overrides Function area() As Double
        Return acrossLine * acrossLine
    End Function
End Class
Public Class consumeShapes
    Public Sub makeShapes()
        Dim shape1, shape2 As shape
        shape1 = New circle
        shape2 = New square
    End Sub
End Class

你可以将 shape1shape2 声明为 shape 类型。 但是无法通过 shape 创建对象,因为它缺少函数 area 的功能并标记为 MustInherit

因为它们被声明为 shape,所以变量 shape1shape2 仅限于派生类 circlesquare 中的对象。 Visual Basic 不允许你将任何其他对象分配给这些变量,这为你提供了高级别的类型安全性。

使用情况

MustInherit 修饰符可用于以下上下文:

Class 语句

另请参阅