程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
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之旅(六)—重載與隱藏正文


大李坐在轉椅上左右晃動著,手中的一個硬幣在他指間乖巧地翻騰著。 “hi, Henry。你對重寫與重載的意思了解是怎樣樣的呢?”

我正盯著他手中的硬幣發呆呢,“哦,重寫,就是您方才舉的示例中,在派 生類中用Overrides重新編寫有Overridable標識的基類的辦法或屬性;重載麼, 就是我們可以用異樣的稱號,在一個類中用不同的參數列表來創立多個辦法和屬 性,在調用時就可以順應不同參數類型的要求。”

“在一個類 中創立?”大李的左眉向上一挑,我就知道我能夠說錯了。但是,好象沒有 說錯什麼呀。

“那好,你看一下,這樣的寫法會有什麼後果?”

Public Class CBaseHenry 
 
  Public Sub oldY() 
 
    Console.WriteLine("基類的oldY辦法") 
 
  End Sub 
 
End Class 
 
Public Class CDerivedHenry 
 
  Inherits CBaseHenry 
 
  Public Overloads Sub oldY(ByVal j As Integer) 
 
    Console.WriteLine("派生類的oldY辦法") 
 
  End Sub 
 
End Class 
 
Public Sub Main() 
 
  Dim obj As CDerivedHenry = New CDerivedHenry()

然後大 李寫了obj.oldY這時呈現的智能感知菜單上呈現了參數列表:

“咦,第二個oldY()無參數進程簽名應該是基類定義的呀。為什 麼在派生類的實例中也會呈現呀!”我不由獵奇起來。

“沒錯 。還記得我上次曾顯式編寫結構函數的事嗎?我用了一個mybase.new()用於承繼 下基類的性質。如今沒有寫,其實是一種默許的隱式調用。”大李一說我就 明白了,其完成在的派生類應該是內含兩個oldY辦法了,無參數的oldY()其實就 是基類的辦法,是由於Overloads和Mybase.new()雙重作用的影響。

“那你再看這樣的變化狀況。”大李象是看出我曾經明白了這 個問題。他在派生類中添加了一個用Overloads標識的與基類方式分歧的無參數 oldY()。

Public Class CBaseHenry 
 
  Public Sub oldY() 
 
    Console.WriteLine("基類的oldY辦法") 
 
  End Sub 
 
End Class 
 
Public Class CDerivedHenry 
 
  Inherits CBaseHenry 
 
  Public Overloads Sub oldY(ByVal j As Integer) 
 
    Console.WriteLine("派生類的oldY辦法1") 
 
End Sub 
 
  Public Sub oldY() 
 
    Console.WriteLine("派生類的oldY辦法2") 
 
  End Sub 
 
End Class 
 
Public Sub Main() 
 
  Dim obj As CDerivedHenry = New CDerivedHenry() 
 
  obj.oldY() 
 
End Sub 

“好的,如今你再說說看,如今的obj.oldY()的運轉 後果會打印出什麼?”大李手按在F5運轉鍵上問我。

“應該是 派生類的,不對,基類,呃,派生類……”我一下子就暈了。

“呵呵。”大李也不由發笑起來。然後點擊了一下F5鍵。後果 是:

派生類的oldY辦法2

“這就叫隱藏,我們用 overloads方式,隱藏了基類的同名辦法。以防用戶發作混雜。普通來說,隱藏有 兩種狀況,一種是經過范圍來完成。比方你定義一個全局變量x,但在一個辦法中 ,你又定義了一個部分變量x,在辦法中運用x時,運用的是部分變量的那一個, 也就是用部分變量x在辦法中隱藏了全局變量x。另一種狀況,就是經過承繼來隱 藏,辦法麼,除了方才用的overloads,還可以用Shadows關鍵字來完成。 ”

“Shadows?暗影?倒是很貼切的名字。這個是怎樣用的呢 ?”我興味由但是生。

“Shadows功用很強的。”說著, 大李又開端修正方才的代碼了。

Public Class CBaseHenry 
 
  Public Sub oldY() 
 
    Console.WriteLine("基類的oldY辦法") 
 
  End Sub 
 
End Class 
 
Public Class CDerivedHenry 
 
  Inherits CBaseHenry 
 
  Public Shadows Sub oldY(ByVal j As Integer) 
 
    Console.WriteLine("派生類的oldY辦法") 
 
  End Sub 
 
End Class 
 
Public Sub Main() 
 
  Dim obj As CDerivedHenry = New CDerivedHenry()

再寫到 obj.oldY時,呈現的智能感知菜單上就剩下一個辦法了。

“哈,真的呢,基類的辦法看不到了。但是,這和重寫的效果豈 不是一樣了嗎?”我不由地又想起一個問題,假如是一樣的作用,要 Shadows干什麼呀。

“還是有區別的。”大李開端扳著指頭數 起來,“最分明的區別在於,隱藏適用於任何元素類型,你可以在派生類中 用Public Shadows oldY as Integer來隱藏基類的oldY()辦法;而重寫只能適用 於辦法與屬性,而且聲明參數與修飾符都要求完全分歧。”

“ 還要留意一點,當派生類又派生出一個子類時,重寫與隱藏都會被承繼下去。當 然,假如在派生類中是用private來修飾Shadows成員的話,它的子類就會承繼它 基類的成員了。”

“我倒是覺得,如今VB.NET對承繼的處置功 能真的很弱小,有承繼,關於編程者來說,真的是件壞事。”我不由感慨道 。

“不錯,承繼層次體系是有很多益處,但是事物總是有其雙面性 ,承繼也有不少問題,其中最費事的,就是‘軟弱的基類’。” 大李緊鎖眉頭仔細地說。

“哦,什麼叫‘軟弱的基類’ ?”我不解地問。

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