天天看点

实例021类的继承Inherits StatementMustInherit NotInheritable继承的基础知识 (Visual Basic)

Inherits Statement

导致当前类或接口继承其他类或接口集的属性、变量、属性、过程和事件。

MustInherit 

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

NotInheritable

指定类不能用作基类。

继承的基础知识 (Visual Basic)

Inherits

语句用于根据称为基类的新类(称为派生类)声明新类。 派生类继承并可以扩展基类中定义的属性、方法、事件、字段和常量。 以下部分介绍继承的一些规则,以及可用于更改类继承或继承方式的修改器:

继承修改器

Visual Basic 引入了以下类级语句和修改器来支持继承:

  • Inherits

    语句 = 指定基类。
  • NotInheritable

    修改器 = 防止程序员将类用作基类。
  • MustInherit

    修改器 = 指定类仅用于基类。 不能直接创建

    MustInherit

    类的实例;因此,无法直接创建类的实例。它们只能创建为派生类的基类实例。 (其他编程语言(如C++和 C#)使用术语抽象类来描述此类

派生类中的重写属性和方法

默认情况下,派生类继承其基类的属性和方法。 如果继承的属性或方法在派生类中的行为不同,则可以重写它。 也就是说,您可以在派生类中定义方法的新实现。 下列修饰符用于控制如何重写属性和方法:

  • Overridable

    • 允许在派生类中重写类中的属性或方法。
  • Overrides

    • 重写基

    Overridable

    类中定义的属性或方法。
  • NotOverridable

    • 防止在继承类中重写属性或方法。 默认情况下,

    Public

    方法为

    NotOverridable

  • MustOverride

    • 要求派生类重写属性或方法。 使用

    MustOverride

    关键字时,方法定义仅包含

    Sub

    。 

    Function

    。 

    Property

     不允许任何其他语句,特别是没有

    End Sub

    End Function

    语句。 

    MustOverride

    方法必须在类中

    MustInherit

    声明。

MyBase 关键字

关键字

MyBase

的作用类似于引用类当前实例的基类的对象变量。 

MyBase

通常用于访问派生类中重写或隐藏基类成员。 特别是,

MyBase.New

用于从派生类构造函数显式调用基类构造函数。

下面的列表描述了对 使用

MyBase

的限制:

  • MyBase

    指直接基类及其继承成员。 它不能用于访问

    Private

    类中的成员。
  • MyBase

    是关键字,而不是真实对象。 

    MyBase

    不能分配给变量、传递给过程或用于

    Is

    比较。
  • MyBase

    限定的方法不必在直接基类中定义;它可以在间接继承的基类中定义。 为了使 引用

    MyBase

    具有正确的编译,某些基类必须包含一个方法,匹配调用中显示的参数的名称和类型。
  • 不能使用

    MyBase

    调用

    MustOverride

    基类方法。
  • MyBase

    不能用来限定自己。 因此,以下代码无效:

    MyBase.MyBase.BtnOK_Click()

  • MyBase

    不能在模块中使用。
  • MyBase

    不能用于访问标记为

    Friend

    基类的基类成员,因为基类位于其他程序集中。

有关详细信息和另一个示例,请参阅如何:访问派生类隐藏的变量。

MyClass 关键字

关键字

MyClass

的作用类似于对象变量,该变量引用最初实现的类的当前实例。 

MyClass

类似于

Me

,但每个方法和属性调用

MyClass

都被视为方法或属性不是可重写的。 因此,方法或属性不受派生类中重写的影响。

  • MyClass

    是关键字,而不是真实对象。 

    MyClass

    不能分配给变量、传递给过程或用于

    Is

    比较。
  • MyClass

    引用包含类及其继承成员。
  • MyClass

    可用作成员的

    Shared

    限定符。
  • MyClass

    不能在

    Shared

    方法内使用,但可以在实例方法内访问类的共享成员。
  • MyClass

    不能在标准模块中使用。
  • MyClass

    可用于限定在基类中定义且没有该类中提供的方法的实现的方法。 这种引用与

    MyBase.

    方法的含义相同。

一个小例子:

Module Module1

    Public Class 人员

        Private pName As String

        Public Property Name As String

            Get

                Return pName

            End Get

            Set(ByVal value As String)

                pName = value

            End Set

        End Property

        Public Sub Work()

            Dim iCount As Integer

            For iCount = 1 To 10

                Console.WriteLine(pName & "Working" & CStr(iCount))

            Next

        End Sub

    End Class

    Public MustInherit Class 售货员

        Inherits 人员

        Public Corporation As String

        Public City As String

    End Class

    Public Class 百货售货员

        Inherits 售货员

        Public Sub Speak()

            Console.WriteLine("汪汪" & Name)

        End Sub

    End Class

    Sub Main()

        Dim Person As New 人员

        Person.Name = "张三"

        Person.Work()

        Dim SalesMan As New 百货售货员

        SalesMan.Name = "李四"

        SalesMan.City = "西雅图"

        Console.WriteLine(SalesMan.Name)

        Console.WriteLine(SalesMan.City)

        SalesMan.Work()

        SalesMan.Speak()

        Console.Read()

    End Sub

End Module