重載、重寫與隱藏是繼承( 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