關於VB.NET基類繼承、過載、隱藏的總結歸納
-
很喜歡用VB.NET開發語言,在網上也經常收集,自己也總結了一點小筆記,在這裡共大家參考一下,本文主要對VB.NET基類的繼承,重寫,過載,隱藏的概念和方法進行總結,來看看吧。
通過宣告Inherits關鍵字,來標識該類的基類是誰。Inherits 基類名
- Sub New(s as string)'構造,加入變數s 可要求強行賦值
- '初始化
- MyBase.New() '注意:這句話要放在sub內的第一句,基類帶引數時要標明
- End Sub
- Protected Overrides Sub Finalize()'析構
- '收尾
- MyBase.Finalize()
- End Sub
在基類中用Overridable修飾符來標識允許基類中的屬性或方法在其派生類中被重寫,沒有標識的其實就是預設為有NotOverridable修飾符來隱式地標識,用於提醒編譯器該屬性或方法不可被重寫。
◆重寫: 在派生類中用Overrides重新編寫有Overridable標識的基類的方法或屬性。
◆過載: Overloads,用同樣的名稱,用不同的引數列表來建立多個方法和屬性,在呼叫時就可以適應不同引數型別的要求。
◆隱藏: 用派生類的名稱代替基類的名稱,並非讓該名稱消失。Shadows方式,適用於任何元素型別,亦可宣告成任何元素型別。隱藏時在派生類中用private來修飾,它的子類就會繼承它基類的成員。在編輯器中隱藏基類成員的提示
- <System.ComponentModel.EditorBrowsable(ComponentModel.EditorBrowsableState.Never)> Public Shadows 基類名稱1,基類名稱2,.....
用來控制VB.NET基類成員訪問的修飾符
Friend : 只在當前專案中可用
private : 只在本類中可用
protected : 在本類和本類的派生類中可用的成員
protected friend:在當前專案和本類的派生類中可用
public :類以外的程式碼也可以訪問
預設值為:public
每當建立類的例項時,如果該物件中存在名為 New 的過程,則公共語言執行庫 (CLR) 嘗試執行它。New 是一種稱為“建構函式”的過程,該建構函式用於在物件中的任何其他程式碼執行之前初始化新物件。New 建構函式可用於開啟檔案、連線到資料庫、初始化變數以及處理任何需要在可使用物件前完成的其他任務。
當建立派生類的例項時,基類的 Sub New 建構函式首先執行,然後執行派生類中的建構函式。這是因為 Sub New 建構函式中的第一行程式碼使用語法 MyBase.New() 呼叫類層次結構中該類本身緊上面的類的建構函式。然後呼叫該類層次結構中每個類的 Sub New 建構函式,直到到達基類的建構函式。此時,基類建構函式中的程式碼執行,接著執行所有派生類中每個建構函式的程式碼,最後執行最相近派生的類中的程式碼。當不再需要某物件時,CLR 呼叫該物件的 Finalize 方法,然後釋放其記憶體。Finalize 方法稱為“解構函式”,因為它執行清理任務,如儲存狀態資訊、關閉檔案和與資料庫的連線,以及執行在釋放物件前必須完成的其他任務。
當呼叫派生類的 Sub Finalize 方法時,首先執行所需的任何清理任務,然後使用語法 MyBase.Finalize() 顯式呼叫其基類的 Sub Finalize 方法。因此,Sub Finalize 方法首先從最相近派生的類開始執行,最後執行VB.NET基類中的程式碼。
VB.NET引入了一些語句和修飾符支援繼承,下表描述了VB.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是在派生類中重新宣告類成員
- Class A
- Public Sub F()
- Debug.Print("基類不能重寫")
- End Sub
- Public Overridable Sub G()
- Debug.Print("基類可重寫")
- End Sub
- Public Sub H()
- Debug.Print("A.H")
- End Sub
- End Class
- Class B
- Inherits A '繼承A
- Public Shadows F As String = "隱藏基類,重新生成一個"
- Public Overrides Sub G()
- Debug.Print("重寫")
- End Sub
- Public Overloads Sub G(ByVal s As Int32)
- Debug.Print("過載")
- End Sub
- '隱藏基類H成員,編輯器中看不到提示,但依然可以用
- <System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)> Public Shadows h As Int16 = "3"
- End Class
- Public Class Form1
- Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
- Dim b As New B()
- Dim a As New A
- a.F()
- a.G()
- a.H()
- Debug.Print(b.F)
- b.G()
- b.G(3)
- Debug.Print(b.h)
- End Sub
- End Class
輸出結果:
基類不能重寫
基類可重寫
A.H
隱藏基類,重新生成一個
重寫
過載
3