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