1. 程式人生 > >關於VB.NET基類繼承、過載、隱藏的總結歸納

關於VB.NET基類繼承、過載、隱藏的總結歸納

文章主要介紹了VB.NET基類的繼承,重寫,過載,隱藏,VB.NET類成員訪問的修飾符Friend,private ,protected,protected friend,public 。
  • 很喜歡用VB.NET開發語言,在網上也經常收集,自己也總結了一點小筆記,在這裡共大家參考一下,本文主要對VB.NET基類的繼承,重寫,過載,隱藏的概念和方法進行總結,來看看吧。

    通過宣告Inherits關鍵字,來標識該類的基類是誰。Inherits 基類名

    1. Sub New(s as string)'構造,加入變數s 可要求強行賦值  
    2. '初始化  
    3. MyBase.New() '注意:這句話要放在sub內的第一句,基類帶引數時要標明  
    4. End Sub  
    5. Protected Overrides Sub Finalize()'析構  
    6. '收尾  
    7. MyBase.Finalize()  
    8. 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是在派生類中重新宣告類成員

  1. Class A  
  2. Public Sub F()  
  3. Debug.Print("基類不能重寫")  
  4. End Sub  
  5. Public Overridable Sub G()  
  6. Debug.Print("基類可重寫")  
  7. End Sub  
  8. Public Sub H()  
  9. Debug.Print("A.H")  
  10. End Sub  
  11. End Class  
  12. Class B  
  13. Inherits A '繼承A  
  14. Public Shadows F As String = "隱藏基類,重新生成一個"
  15. Public Overrides Sub G()  
  16. Debug.Print("重寫")  
  17. End Sub  
  18. Public Overloads Sub G(ByVal s As Int32)  
  19. Debug.Print("過載")  
  20. End Sub  
  21. '隱藏基類H成員,編輯器中看不到提示,但依然可以用  
  22. <System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)> Public Shadows h As Int16 = "3"
  23. End Class  
  24. Public Class Form1  
  25. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load  
  26. Dim b As New B()  
  27. Dim a As New A  
  28. a.F()  
  29. a.G()  
  30. a.H()  
  31. Debug.Print(b.F)  
  32. b.G()  
  33. b.G(3)  
  34. Debug.Print(b.h)  
  35. End Sub  
  36. End Class 

輸出結果:
基類不能重寫
基類可重寫
A.H
隱藏基類,重新生成一個
重寫
過載
3