自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

剖析VB.NET面向?qū)ο笤?/h1>

開(kāi)發(fā) 后端
這里就VB.NET面向?qū)ο笳归_(kāi)全面的講解,VB.NET面向?qū)ο罂梢宰屇阌靡粋€(gè)特定的名字定義多個(gè)方法或?qū)傩?,只要它們的參?shù)定義不同。

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

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

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

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

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

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

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

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

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

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

  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è)構(gòu)造器通常有共同的代碼——例如,驗(yàn)證一個(gè)或多個(gè)參數(shù)的代碼。這時(shí)候,你就可以簡(jiǎn)化你的類(lèi)的結(jié)構(gòu),讓一個(gè)構(gòu)造器調(diào)用另一個(gè)構(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)造器,也需要一個(gè)或多個(gè)帶有參數(shù)的構(gòu)造器時(shí),就會(huì)出現(xiàn)一個(gè)有趣的問(wèn)題。在這種情況下,你必須明確聲明一個(gè)空的Sub New過(guò)程,因?yàn)榫幾g器不會(huì)自動(dòng)為你創(chuàng)建它:

  1. Sub New()  
  2. ' no need to add code here  
  3. End Sub  
責(zé)任編輯:田樹(shù) 來(lái)源: 博客
相關(guān)推薦

2009-10-13 17:03:55

VB.NET面向?qū)ο?/a>

2009-10-12 16:51:28

VB.NET使用Ora

2010-01-13 11:18:24

VB.NET面向?qū)ο?/a>

2010-01-21 12:55:08

VB.NET對(duì)象序列

2009-11-02 16:41:55

VB.NET串行化對(duì)象

2009-10-22 10:10:20

VB.NET Proc

2009-10-13 14:19:03

VB.NET面向?qū)ο缶?/a>

2009-10-13 11:28:39

VB.NET面向?qū)ο缶?/a>

2009-10-23 13:14:38

2009-10-20 17:38:20

VB.NET exce

2009-06-29 10:50:18

VB.NET面向?qū)ο竽芰?/a>

2009-10-21 16:00:26

VB.NET CASE

2009-11-03 10:09:48

VB.NET對(duì)象

2009-10-13 15:09:19

VB.NET使用Tre

2009-10-14 13:21:46

VB.NET Acco

2010-01-14 14:21:07

2010-01-22 15:37:02

VB.NET監(jiān)控類(lèi)

2009-10-28 10:15:48

VB.NET框架類(lèi)庫(kù)

2009-10-09 15:59:41

VB.NET對(duì)象

2009-11-04 13:12:33

VB.NET面向?qū)ο缶?/a>
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)