體驗VisualBasic.Net的繼承和重載
介紹
在這個實踐練習中,你將會建立一個簡單的Visual Basic .NET應用程序。我們將用它來示范繼承的概念。
Microsoft Visual Basic .NET允許開發者定義基類來支持繼承。派生類可以繼承、擴展基類的屬性、方法、事件和數據成員。派生類可以Override基類的方法。所有的類缺省都是可繼承的。Form也是類,可以在已存在的Form類的基礎上利用繼承定義新的Form類。
繼承的語句和修飾符
Visual Basic .NET 引入了一些語句和修飾符支持繼承,下表描述了繼承的語句和說明:
| 語句/修飾符 | 描述 |
| Inherits | Inherits 語句--指明了當前的類從哪個類繼承。Inherits 關鍵詞只用在類和接口中 |
| NotInheritable | NotInheritable 修飾符--禁止用作基類 |
| MustInherit | MustInherit修飾符--指明不能建立當前類的實例。這個類只能被繼承 |
| Overridable | Overridable 修飾符--允許類的一個屬性或方法可以被Override。Public 方法缺省是 NotOverridable |
| Overrides | Overrides 修飾符--Override基類的一個屬性或方法 |
| NotOverridable | NotOverridable 修飾符 (缺省)- -禁止類的一個屬性或方法被Override |
| MustOverride | MustOverride 修飾符--需要繼承的類Override的屬性或方法。當使用MustOverride 關鍵詞的時候,方法的定義只包括Sub, Function和 Property 語句。要特別強調的是,其他任何語句是不允許沒有End Sub, End Function或者 End Property 語句。類中帶有MustOverride 方法都必須聲明為MustInherit。Public 方法缺省值是NotOverridable |
| Shadows | Shadows 修飾符--允許重新使用被繼承的類成員的名字。Shadow不刪除繼承得來的類的類型成員,它僅僅是使所有被繼承的類型成員在派生類中不可使用。Shadow是在派生類中重新聲明類成員 |
以下幾個語句和修飾符的組合不被允許:
· Overridable 和NotOverridable 是絕對互斥的,不能組合。
· NotOverridable 不能和 Overridable 或者 MustOverride組合。
· Overrides 意味著Overridable 不能和MustOverride組合。
· MustOverride 意味著Overridable 不能和NotOverridable組合。
· MustOverride 方法不能Override其他方法,所以不能和Overrides組合。
繼承實例1
你將利用Microsoft Visual Studio .NET 集成開發環境(Integrated Development Environment,IDE)建立一個簡單的執行程序。
1. 打開IDE:單擊Start,單擊Programs,單擊Microsoft Visual Studio .NET 7.0,單擊Microsoft Visual Studio .NET 7.0。起始頁出現了。
2. 建立新的工程:單擊New Project打開新的工程窗口。
3. 在 Project Types欄里,單擊Visual Basic Projects。
4. 在Templates欄里,單擊Empty Project。
5. 單擊OK。
6. 在工程中添加一個類:在Project菜單,單擊Add Class。
7. 在Name欄里,輸入A.vb。
8. 單擊Open,一個空的類如圖1所示。
![]() 圖一:一個空類 |
9. 在Class A 上輸入以下代碼:
| Imports System Imports System.Console |
10. 增加以下代碼完成Class A:
| Class A Public Sub F() Console.WriteLine("A.F") End Sub Public Overridable Sub G() Console.WriteLine("A.G") End Sub End Class |
11. 在 Class A下增加以下代碼:
| Class B Inherits A Public Shadows Sub F() Console.WriteLine("B.F") End Sub Public Overrides Sub G() Console.WriteLine("B.G") End Sub End Class |
在以下的代碼段,你聲明了兩個對象,并且調用他們的方法看結果。
| Class Test Shared Sub Main() Dim b As New B() Dim a As A = b a.F() b.F() a.G() b.G() End Sub End Class |
12. 按 F5 運行應用程序。Output 窗口彈出顯示結果,如圖二所示:
![]() 圖二:繼承實例1的輸出結果 |
注意 b.F() 和b.G()的結果都是意料中的。注意,a.G()調用的是B.G,而不是A.G。這是因為我們允許Class A的方法G可以被Override。實際執行的方法取決于class B的G方法,因為它Override了從class A中繼承的方法。這種改變編譯時方法的執行的能力使得繼承成為面向對象變成中的重要特色。
13. 單擊File,接著單擊Close Solution。
在下個實例里打開IDE。
繼承實例2
這個例子進一步的說明了繼承。
1. 單擊File,單擊New,單擊Project 打開新的Project 窗口。
2. 在Project Types欄里,單擊Visual Basic Projects,在Templates 欄里,單擊Empty Project.
3. 單擊OK。
4. 在工程中增加一個新的類:在Project菜單,單擊Add Class。
5. 在Name欄里,輸入A.vb。
6. 單擊Open。一個空的Class出現。
7. 將以下代碼添加到Class A之上:
| Imports System Imports System.Console |
8. 增加以下代碼完成class A:
| Class A Public Overridable Sub F() Console.WriteLine("A.F") End Sub End Class |
9. 在Class A之下增加以下代碼:
| Class B Inherits A Public Overrides Sub F() Console.WriteLine("B.F") End Sub End Class Class C Inherits B Public Shadows Overridable Sub F() Console.WriteLine("C.F") End Sub End Class Class D Inherits C Public Overrides Sub F() Console.WriteLine("D.F") End Sub End Class |
在以下的代碼段,你聲明了四個對象,并且調用他們的方法看結果:
| Class Test Shared Sub Main() Dim d As New D() Dim a As A = d Dim b As B = d Dim c As C = d a.F() b.F() c.F() d.F() End Sub End Class |
10. 按 F5 執行應用程序。Output出現,結果如圖3所示:
![]() 圖三. 繼承實例2的輸出結果 |
注意 在class A 中有一個可以被override方法。在class B 有一個override方法。Class A 和class B 和前一個實例非常相似。Class B 繼承class A 并且Override了方法F,另外改變了方法 F。 a.F() 和b.F() 都調用B.F,因為class A方法 F 已經被class B 的方法 F Override。
在class C 中,方法F被聲明為既是一個可以被override方法也是一個shadow 方法。這意味著 這個方法在編譯時屏蔽了基類的方法 F,同時它可以被class C的子類Override。Class D 繼承class C。class D 中有一個override 方法,它改變了class C 方法 F在運行時的執行。這就是c.F() 和d.F() 都調用 D.F的原因。
因為方法可以屏蔽(Shadow)被繼承的方法, 所以在一個類中可以包含多個具有相同的signature(即函數名,參數和返回值相同)的overridable 方法而不會引起歧義。因為除了那個被直接繼承的基類方法外,其他所有的基類的方法都被隱藏而不可訪問,從而沒有名字沖突。
如果要調用shadowed overridable 方法,我們可以把類D的實例轉為其基類(在本例中A和B)的實例來調用它。
結語
當你不看工程文件時,關閉所有的窗口。
重置操作
可以通過HOLT1-01Experience Visual Studio .NET.msi 安裝包和Reset.vbs 腳本文件清除所有與實驗相關的信息。
按照以下步驟重置你的電腦
1. 雙擊HOLT1-01 Experience Visual Studio .NET.msi. 安裝想到會出現。
2. 單擊Next。一個題為Program Maintenance頁面出現。
3. 選擇Remove, 接著單擊Next。一個題為Remove the Program 窗口出現。
4. 單擊Remove。 這將刪除所有的與實驗相關的文件夾和文件。
5. 單擊Finish。
你現在將刪除Start菜單中快捷方式。
6. 雙擊Reset.vbs。當Windows Script Host 窗口出現時,單擊 OK。
再次運行這個實驗:
1. 安裝HOLT1-01 Experience Visual Studio .NET.MSI.
2. 執行 Setup.vbs.


