MustOverride:
指定在这个类中没有实现的属性或过程,且必须在派生类中重写属性或过程后才可以使用。
规则
-
不完整的声明。 在指定 MustOverride 时,请勿为属性或过程提供任意附加行的代码,即使 End Function、End Property 或 End Sub 语句也不提供。
-
组合修饰符。 不能在同一声明中将 MustOverride 与 NotOverridable、Overridable 或 Shared 同时指定。
-
隐藏与重写。隐藏和重写都重新定义继承的元素,但这两种方法之间有很大差异。有关更多信息,请参见 Visual Basic 中的隐藏。
-
替换术语。除了在重写中以外都无法使用的元素有时称为“纯虚拟”元素。
指定某个类只能用作基类,您不能直接从该类创建对象。
MustInherit 类的另一个用途是限定一个变量仅用于一组相关类。您可以先定义一个基类,然后从此基类派生出所有这些相关的类。此基类无需提供所有派生类所共同拥有的任何功能,但它可以作为一个筛选器,将值分配给变量。如果您的使用代码将一个变量声明为基类,Visual Basic 将允许您仅将这些派生类中的某个类的对象分配给该变量。
.NET Framework 定义多个 MustInherit 类,包括 Array、Enum 和 ValueType。ValueType 就是限制变量的基类的一个示例。所有值类型均从 ValueType 派生。如果将一个变量声明为 ValueType,则可以仅将值类型分配给该变量。
规则
-
声明上下文。只能在 Class 语句中使用 MustInherit。
-
组合修饰符。不能在同一声明中同时指定 MustInherit 和 NotInheritable。
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。
由于变量 shape1 和 shape2 被声明为 shape 类型,因此它们被限定为仅使用派生类 circle 和 square 中的对象。Visual Basic 不允许您将任何其他对象分配给这些变量,这样您就可以获得很高的类型安全级别。