程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB.NET >> VB.NET之旅(五)—類的承繼

VB.NET之旅(五)—類的承繼

編輯:VB.NET

VB.NET之旅(五)—類的承繼。本站提示廣大學習愛好者:(VB.NET之旅(五)—類的承繼)文章只能為提供參考,不一定能成為您想要的結果。以下是VB.NET之旅(五)—類的承繼正文


“類的承繼?”大李點搖頭,“以前很多人批判VB的功用不 完善時,都會加上這個條件。但是如今VB.NET中曾經是比擬完善的面向對象編程 辦法了。方才我們也提到過,類與 VB.NET 的構造相似,讓我們可以定義封裝一 組相關項的數據類型。但是與構造的一個重要區別就是,VB.NET 類可以承繼和擴 展其他類的特性。作為新類的根底的類稱為‘基類’。從基類派生的 類稱為‘派生類’。派生類承繼基類中定義的一切字段、屬性、辦法 和事情。你看,我們只需對類停止一次開發和調試,就可以將其作為其他類的基 礎反復運用。”

“類的承繼的概念我學過的,在VB.NET中是如 何來實踐演練呢?”我還是堅持著問。

“我寫段代碼給你看一 下吧,俗話不是說,百聞不如一見嗎?”大李調侃了兩句,噼噼啪啪地開端 敲打起鍵盤來:

Public Class CBaseHenry 
 
  Private x As Integer = 10 
 
  Protected y As Integer 
 
  Sub New() 
 
    Console.WriteLine("基類的結構") 
 
  End Sub 
 
  Protected Overrides Sub Finalize() 
 
    Console.WriteLine("基類的析構") 
 
   MyBase.Finalize() 
 
  End Sub 
 
Public Overridable Function GetY(ByVal x As Integer) As Integer

 
 
  Me.y = me.x + x ‘private類型的me.x只能在基類中運用 
 
    Console.WriteLine("基類的GetY辦法,後果為:" & Me.y) 
 
    Return Me.y 
 
  End Function 
 
  Public Sub OldY() 
 
    Console.WriteLine("基類的OldY辦法") 
 
End Sub 
 
End Class

“你看,這是一個基類,我再給你寫個承繼自該類的 派生類。”他一邊說一邊持續寫:

Public Class 

CDerivedHenry 
 
  Inherits CBaseHenry 
 
  Sub New() 
 
    MyBase.New() ‘留意:這句話要放在sub內的第一句 
 
    Console.WriteLine("派生類的結構") 
 
  End Sub 
 
  Protected Overrides Sub Finalize() 
 
    Console.WriteLine("派生類的析構") 
 
    MyBase.Finalize() 
 
  End Sub 
 
  Public Overrides Function GetY(ByVal x As Integer) As 

Integer 
 
    Me.y = x * 10 ‘protected類型的me.y卻可以在派生類中使

用 
 
    Console.WriteLine("派生類的GetY辦法,後果為:" & Me.y) 
 
    Return Me.y 
 
  End Function 
 
  Public Sub NewY() 
 
    Console.WriteLine("派生類的新辦法") 
 
  End Sub 
 
End Class

“你看清了吧,我們經過聲明Inherits關鍵字,來標 識該類的基類是誰,假如沒有標識的類,比方CBaseHenry,VB.Net就會視其為派 生自Object基類,這是種隱式承繼,和構造是隱式承繼自ValueType 類的方式是 一樣的。”大李指著屏幕跟我講解著。

“那這些overrides與 overload標識是什麼意思呀?”我隱隱覺得到它們的意義,卻沒法清楚地說 出來。

“我們運用承繼,也要允許派生類中的某些屬性或辦法有與 基類不同的行為,我們想‘重寫’它,但基類也得要贊同你才干重寫 呀,否則不就會發作命名抵觸了嗎?由於派生類的對象是可以運用基類的公用成 員的,那怎樣知道哪些基類的辦法與屬性是被派生類重寫了呢?所以就必需有一 個商定:我們在基類中用Overridable修飾符來標識允許基類中的屬性或辦法在其 派生類中被重寫,沒有標識的其實就是默許為有NotOverridable修飾符來隱式地 標識,用於提示編譯器該屬性或辦法不可被重寫;然後在派生類重寫時,我們就 用Overrides修飾符來標識哪些是重寫自基類中定義的 Overridable 屬性或辦法 。”大李娓娓道來,“我們來演練一下對派生類的操作吧。 ”

Public Sub Main() 
 
  Dim obj As CDerivedHenry = New CDerivedHenry() 
 
  obj.GetY(4)  '調用派生類的GetY辦法 
 
  obj.OldY()   '調用基類的oldY辦法 
 
  obj.NewY()   '調用派生類的NewY辦法 
 
End Sub

然後大李按了一下F5鍵,在“輸入”窗口中就呈現 了如下的運轉後果:

  基類的結構          ‘開

始運轉New CDerivedHenry() 
 
  派生類的結構 
 
  派生類的GetY辦法,後果為:40  ‘obj.GetY(4)的運轉後果=4*10,

不等於基類的(4+10) 
 
  基類的OldY辦法        ‘obj.OldY()的運轉後果 
 
  派生類的新辦法        ‘obj.NewY()的運轉後果 
 
  派生類的析構 
 
  基類的析構

“你看,你只在Main中實例化了一個派生類的對 象,為什麼先會呈現‘基類的結構’?”大李問。

“這個麼,”我開端在代碼中檢查起來,“是這句了。 ”我手指著派生類裡的這段代碼:

Sub New() 
 
    MyBase.New() ‘留意:這句話要放在sub內的第一句 
 
    Console.WriteLine("派生類的結構") 
 
End Sub

“沒錯,我們必需要留意這一點,就是派生類的結構函 數與析構函數都必需重新編寫。New 結構函數普通用於翻開文件、銜接到數據庫 、初始化變量以及處置任何需求在可運用對象前完成的其他義務。我們必需在Sub New 結構函數中的第一行代碼運用語句 MyBase.New(),來調用類層次構造中該類 的基類的結構函數,以取得基類的性質。析構則是在Sub Finalize中執行完對派 生類的的清算義務,如保管形態信息、封閉文件和與數據庫的銜接,以及執行在 釋放對象前必需完成的其他義務之後,在析構函數的最後一句運用語句 MyBase.Finalize() 顯式調用其基類的 Sub Finalize 辦法,以析構MyBase.New ()結構的內容。所以你從順序運轉後果中也可以很清楚的看出這一順序。” 大李敲擊著屏幕,象是給我提個醒。

“明白了,我會記著的。 ”我誠實地搖頭回應著。

大李忽然想起了什麼,低頭對我說: “講到類的承繼,我們還得看一下重載與隱藏的問題。”

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved