.NET中的MustOverride和MustInherit

来源:互联网 发布:手机淘宝怎样交电费 编辑:程序博客网 时间:2024/06/03 12:41

MustOverride:

指定在这个类中没有实现的属性或过程,且必须在派生类中重写属性或过程后才可以使用。

只能在属性或过程声明语句中使用 MustOverride。指定 MustOverride 的属性或过程必须是类的成员,并且该类必须标记为MustInherit

规则

  • 不完整的声明。 在指定 MustOverride 时,请勿为属性或过程提供任意附加行的代码,即使End FunctionEnd PropertyEnd Sub 语句也不提供。

  • 组合修饰符。 不能在同一声明中将 MustOverrideNotOverridableOverridableShared 同时指定。

  • 隐藏与重写。隐藏和重写都重新定义继承的元素,但这两种方法之间有很大差异。有关更多信息,请参见 Visual Basic 中的隐藏

  • 替换术语。除了在重写中以外都无法使用的元素有时称为“纯虚拟”元素。


指定某个类只能用作基类,您不能直接从该类创建对象。

备注
基类(也称为“抽象类”)的用途就是定义从此基类派生的所有类所共同拥有的功能,这样派生类将不必重新定义这些公共元素。某些情况下,此公共功能不够完整,无法生成一个可用的对象,因此每个派生类都需要单独定义所缺少的功能。此时,您需要让使用代码仅从派生类创建对象。您可以对基类使用MustInherit 来强制执行此操作。

MustInherit 类的另一个用途是限定一个变量仅用于一组相关类。您可以先定义一个基类,然后从此基类派生出所有这些相关的类。此基类无需提供所有派生类所共同拥有的任何功能,但它可以作为一个筛选器,将值分配给变量。如果您的使用代码将一个变量声明为基类,Visual Basic 将允许您仅将这些派生类中的某个类的对象分配给该变量。

.NET Framework 定义多个 MustInherit 类,包括ArrayEnumValueTypeValueType 就是限制变量的基类的一个示例。所有值类型均从ValueType 派生。如果将一个变量声明为ValueType,则可以仅将值类型分配给该变量。

规则

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

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

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

您可以将 shape1shape2 声明为 shape 类型。但是,您不能从 shape 创建对象,因为它缺少 area 函数的功能并且被标记为 MustInherit

由于变量 shape1shape2 被声明为 shape 类型,因此它们被限定为仅使用派生类 circlesquare 中的对象。Visual Basic 不允许您将任何其他对象分配给这些变量,这样您就可以获得很高的类型安全级别。



原创粉丝点击