.NET中的MustOverride和MustInherit

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 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

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



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值