MustInherit (Visual Basic)
指定类只能作为基类使用,并且不能直接从其中创建对象。
注解
基类(也称为抽象类)的目的是定义从它派生的所有类共有的功能。 这使派生类不必重新定义公共元素。 在某些情况下,这种通用功能还不够完整,无法生成可用的对象,并且每个派生类都定义了缺失的功能。 在这种情况下,你希望使用代码仅从派生类创建对象。 你在基类上使用 MustInherit
来强制执行此操作。
MustInherit
类的另一个用途是将变量限制为一组相关的类。 你可以定义一个基类并从中派生所有这些相关的类。 基类不需要提供所有派生类共有的任何功能,但它可以充当为变量赋值的筛选器。 如果你的使用代码将一个变量声明为基类,则 Visual Basic 允许你仅将一个派生类中的一个对象分配给该变量。
.NET Framework 定义了几个 MustInherit
类,其中包括 Array、Enum 和 ValueType。 ValueType 是限制变量的基类的示例。 所有值类型都派生自 ValueType。 如果将变量声明为 ValueType,则只能为该变量分配值类型。
规则
声明上下文。 只能在
Class
语句中使用MustInherit
。组合修饰符。 不能在同一过程声明中同时指定
MustInherit
和NotInheritable
。
示例
以下示例说明了强制继承和强制重写。 基类 shape
定义了一个变量 acrossLine
。 类 circle
和 square
派生自 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
你可以将 shape1
和 shape2
声明为 shape
类型。 但是无法通过 shape
创建对象,因为它缺少函数 area
的功能并标记为 MustInherit
。
因为它们被声明为 shape
,所以变量 shape1
和 shape2
仅限于派生类 circle
和 square
中的对象。 Visual Basic 不允许你将任何其他对象分配给这些变量,这为你提供了高级别的类型安全性。
使用情况
MustInherit
修饰符可用于以下上下文: