重载、重写与隐藏是继承( Inherits )中的三个重要概念。
一、重载
相同方法或属性的不同实现,根据参数数量、类型的不同有多个版本的实现方式。
用法
定义方法或属性时使用 Overloads 关键字,程序将根据参数的数量、类型和顺序选择正确的版本实现。
示例
Public Class TheClass
Public Overloads Sub ToOverload(ByVal value As Integer )
MsgBox("I got an integer:" & CStr (value))
End Sub
' 重载
Public Overloads Sub ToOverload(ByVal value As String )
MsgBox("I got a string:" & value)
End Sub
End Class
使用
Sub Main()
Dim MyClass As TheClass
MyClass.ToOverload(9527)
MyClass.ToOverload("Hello Nobi!" )
End Sub
运行结果
第一个对话框显示: I got an integer : 9527
第二个对话框显示: I got a string : Hello Nobi!
例外
在同一个类中重载时可以省略 Overloads 关键字。
二、重写
与重载不同,重写方法的参数数量、类型都完全相同,直接代替其所继承的方法或属性。
用法
用于派生类。
基类的方法或属性定义时使用下列修饰符控制重写:
关键字 | 功能 |
Overridable | 允许重写 |
NotOverridable | 禁止重写 |
MustOverride | 必须重写 |
Overrides | 重写方法、属性,在派生类中实现 |
注:如果使用了 MustOverride ,则基类必须是 MustInherit 的抽象类。
示例
' 基类
Public Class TheBase
Public Overridable Sub Talk()
MsgBox("What's up?" )
End Sub
End Class
' 派生类
Public Class TheDerived
Inherits TheBase
Public Overrides Sub Talk()
MsgBox("I'm not the base." )
End Sub
End Class
使用
Sub Main()
Dim TestClass As TheDerived
TestClass.Talk()
End Sub
运行结果
对话框显示: I'm not the base.
三、隐藏
创建大范围成员的局部版本,也可以用其他类型来隐藏一种类型,可以声明相同名称的属性,以隐藏继承的方法。
当派生类中某方法或属性的名称和范围与基类中的方法或属性冲突时,需要使用 Shadows 关键字。
此时将使用生存周期最短的那一个(即更加 “ 局部 ” )。
用法
用于派生类。
示例
基类与派生类均定义了 Value 成员,名称冲突,因此需要在派生类中使用 Shadows 关键字声明。
' 基类
Class TheBase
Public Value As Double = 3.14
End Class
' 派生类
Class TheDerived : Inherits TheBase
Public Shadows ReadOnly Property Value() As Double
Get
Return 9527
End Get
End Property
End Class
使用
当使用 TheDerived 类对象的 Value 成员时,将选取最 “ 局部 ” 的 Value 属性,而不是基类的 Value 变量。
Sub Main()
Dim TestClass As TheDerived
MsgBox(TestClass.Value)
End Sub
运行结果
对话框显示: 9527