日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
剖析VB.NET面向?qū)ο笤?/div>

VB.NET經(jīng)過長時間的發(fā)展,很多用戶都很了解VB.NET了,這里我發(fā)表一下個人理解,和大家討論討論。促使我們從VB6轉(zhuǎn)向VB.NET的一個***的原因就是VB.NET面向?qū)ο缶幊蹋∣OP)這一概念的完全支持。然而,要運用這個功能,只學(xué)習(xí)一些新的關(guān)鍵字是遠遠不夠的。面對這么多可供選擇的新的功能,你可能會感到困惑。因此,我將在本文中說明如何在你的應(yīng)用程序中運用面向?qū)ο蟮墓δ?。我不會深入講述每個新的功能(要進行深入講述,用整本雜志的篇幅都不夠),另外我也提供了代碼例子,在可執(zhí)行的代碼中有注釋,它們有助于你對一般概念的理解。你可能對我用的一些詞不太熟悉,因此我提供了一個最常用的OOP術(shù)語表(見工具條“OOP術(shù)語表”)。

#T#你在應(yīng)用程序中可能會經(jīng)常用到的***個面向?qū)ο蟮恼Z言的特征是方法重載(method overloading)。VB.NET面向?qū)ο罂梢宰屇阌靡粋€特定的名字定義多個方法或?qū)傩?,只要它們的參?shù)定義不同;這就是說,它們的參數(shù)的數(shù)量或類型必須是不同的。例如,一個類可以定義一個GetItem方法,它帶有的參數(shù)可以是一個數(shù)字或字符串,我們根據(jù)參數(shù)類型來返回元素:

 
 
  1. Function GetItem(ByVal index As _
  2. Integer) As Object
  3. ' return an element by its index
  4. End Property
  5. Function GetItem(ByVal key As String) _
  6. As Object
  7. ' return an element by its key
  8. End Property

編譯器通過查看參數(shù)的類型來調(diào)用正確的版本:

 
 
  1. res = obj.GetItem(1) ' numeric key
  2. res = obj.GetItem("Joe") ' string key

當(dāng)你有一個可以采用任何數(shù)據(jù)類型的很普通的方法時,方法重載尤其有用——例如,一個將參數(shù)值添加到一個文本文件的Log方法。你可能想定義一個采用 Object參數(shù)的單獨的版本,因為你想將任何類型的數(shù)據(jù)傳遞到這個方法: 然而,如果你將一個值類型的參數(shù)(一個數(shù)字、日期/時間、一個布爾值或一個結(jié)構(gòu))傳遞到一個Object參數(shù),那么你就暗中強加了一個封裝操作。.NET runtime必須用一個對象來封裝值——這么做就會從托管堆(managed heap)分配內(nèi)存,而且浪費了寶貴的CPU周期。

 
 
  1. Sub Log(ByVal value As Object)
  2.  TW is a TextWriter object  tw.Write("LOG:" & value.ToString())  End Sub 

一個更好的方法就是為你支持的每種數(shù)據(jù)類型定義同一個方法的重載的版本。如果你不想為每種可能的參數(shù)類型寫代碼,你可以實現(xiàn)一個采用Long參數(shù)的版本(它可以處理Boolean、Short、Integer和Long類型的值)、一個采用Double參數(shù)的版本(它也可以處理Single類型的值)和另外兩個分別采用DateTime值和Decimal參數(shù)的重載的版本。這四種版本可以處理最常用的值類型,而讓采用一個Object參數(shù)的重載的版本來處理引用類型(如字符串)或更特殊的對象(如Person)。將一個字符串或一個特殊的對象傳遞到采用一個Object參數(shù)的版本不會增加CPU的費用,因為它沒有強加封裝操作。

VB.NET面向?qū)ο髽?gòu)造器提供了強大的類
在創(chuàng)建一個類庫時,你應(yīng)該用多個重載的方法,而不要用采用可選參數(shù)的一個單獨的方法,因為有些.NET語言(C#最明顯)不能識別可選參數(shù)。記住,兩個重載的方法的不同不僅體現(xiàn)在它們的返回值或你用于每個參數(shù)前的ByVal/ByRef關(guān)鍵字上。(ByVal/ByRef關(guān)鍵字適用于VB.NET和其它一些.NET語言;C#可以讓你定義兩個只在ref或out關(guān)鍵字上有區(qū)別的方法。)

接下來我們要探究的一個面向?qū)ο蟮奶卣骶褪菢?gòu)造器(constructor)。VB.NET構(gòu)造器是一個名為Sub New的過程,當(dāng)客戶端創(chuàng)建類的一個實例時,就會調(diào)用這個過程。如果你的代碼不包含一個明確的構(gòu)造器,VB.NET編譯器就會自動添加一個缺省的構(gòu)造器 ——一個不帶任何參數(shù)的構(gòu)造器。如果沒有明確的(explicit)或隱含的(implicit)構(gòu)造器,你就不能實例化類。VB.NET也可以讓你定義一個帶有參數(shù)的構(gòu)造器,所以你可以讓客戶端實例化在有效狀態(tài)創(chuàng)建對象所必需的字段:

 
 
  1. ' a read-only field can be set only
  2. ' from inside a constructor procedure
  3. Public ReadOnly Filename As String
  4. Sub New(ByVal filename As String)
  5. ' ensure filename isn't null
  6. If filename Is Nothing OrElse _
  7. Filename.Length = 0 Then
  8. Throw New ArgumentException("Invalid file name")
  9. End If
  10. ' assign to the read-only field
  11. Me.FileName = filename
  12. End Sub

帶有參數(shù)的多個構(gòu)造器通常有共同的代碼——例如,驗證一個或多個參數(shù)的代碼。這時候,你就可以簡化你的類的結(jié)構(gòu),讓一個構(gòu)造器調(diào)用另一個構(gòu)造器:

 
 
  1. Public ReadOnly Overwrite As Boolean
  2. Sub New(ByVal filename As String, _
  3. ByVal overwrite As Boolean)
  4. ' a call to another constructor MUST
  5. ' be the first executable statement
  6. Me.New(filename)
  7. ' assign remaining fields
  8. Me.Overwrite = overwrite
  9. End Sub

當(dāng)你既需要缺省的構(gòu)造器,也需要一個或多個帶有參數(shù)的構(gòu)造器時,就會出現(xiàn)一個有趣的問題。在這種情況下,你必須明確聲明一個空的Sub New過程,因為編譯器不會自動為你創(chuàng)建它:

 
 
  1. Sub New()
  2. ' no need to add code here
  3. End Sub

文章題目:剖析VB.NET面向?qū)ο笤?
本文路徑:http://www.dlmjj.cn/article/dhdpcpd.html