成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

開發(fā) 后端
這里就VB.NET面向?qū)ο笳归_全面的講解,VB.NET面向?qū)ο罂梢宰屇阌靡粋€(gè)特定的名字定義多個(gè)方法或?qū)傩裕灰鼈兊膮?shù)定義不同。

VB.NET經(jīng)過長(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ì)感到困惑。因此,我將在本文中說明如何在你的應(yīng)用程序中運(yùn)用面向?qū)ο蟮墓δ堋N也粫?huì)深入講述每個(gè)新的功能(要進(jìn)行深入講述,用整本雜志的篇幅都不夠),另外我也提供了代碼例子,在可執(zhí)行的代碼中有注釋,它們有助于你對(duì)一般概念的理解。你可能對(duì)我用的一些詞不太熟悉,因此我提供了一個(gè)最常用的OOP術(shù)語(yǔ)表(見工具條“OOP術(shù)語(yǔ)表”)。

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

  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  

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

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

當(dāng)你有一個(gè)可以采用任何數(shù)據(jù)類型的很普通的方法時(shí),方法重載尤其有用——例如,一個(gè)將參數(shù)值添加到一個(gè)文本文件的Log方法。你可能想定義一個(gè)采用 Object參數(shù)的單獨(dú)的版本,因?yàn)槟阆雽⑷魏晤愋偷臄?shù)據(jù)傳遞到這個(gè)方法: 然而,如果你將一個(gè)值類型的參數(shù)(一個(gè)數(shù)字、日期/時(shí)間、一個(gè)布爾值或一個(gè)結(jié)構(gòu))傳遞到一個(gè)Object參數(shù),那么你就暗中強(qiáng)加了一個(gè)封裝操作。.NET runtime必須用一個(gè)對(duì)象來封裝值——這么做就會(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ù)類型定義同一個(gè)方法的重載的版本。如果你不想為每種可能的參數(shù)類型寫代碼,你可以實(shí)現(xiàn)一個(gè)采用Long參數(shù)的版本(它可以處理Boolean、Short、Integer和Long類型的值)、一個(gè)采用Double參數(shù)的版本(它也可以處理Single類型的值)和另外兩個(gè)分別采用DateTime值和Decimal參數(shù)的重載的版本。這四種版本可以處理最常用的值類型,而讓采用一個(gè)Object參數(shù)的重載的版本來處理引用類型(如字符串)或更特殊的對(duì)象(如Person)。將一個(gè)字符串或一個(gè)特殊的對(duì)象傳遞到采用一個(gè)Object參數(shù)的版本不會(huì)增加CPU的費(fèi)用,因?yàn)樗鼪]有強(qiáng)加封裝操作。

VB.NET面向?qū)ο髽?gòu)造器提供了強(qiáng)大的類
在創(chuàng)建一個(gè)類庫(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ū)別的方法。)

接下來我們要探究的一個(gè)面向?qū)ο蟮奶卣骶褪菢?gòu)造器(constructor)。VB.NET構(gòu)造器是一個(gè)名為Sub New的過程,當(dāng)客戶端創(chuàng)建類的一個(gè)實(shí)例時(shí),就會(huì)調(diào)用這個(gè)過程。如果你的代碼不包含一個(gè)明確的構(gòu)造器,VB.NET編譯器就會(huì)自動(dòng)添加一個(gè)缺省的構(gòu)造器 ——一個(gè)不帶任何參數(shù)的構(gòu)造器。如果沒有明確的(explicit)或隱含的(implicit)構(gòu)造器,你就不能實(shí)例化類。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)化你的類的結(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è)有趣的問題。在這種情況下,你必須明確聲明一個(gè)空的Sub New過程,因?yàn)榫幾g器不會(huì)自動(dòng)為你創(chuàng)建它:

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

2009-10-13 17:03:55

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

2010-01-21 12:55:08

VB.NET對(duì)象序列

2009-10-12 16:51:28

VB.NET使用Ora

2010-01-13 11:18:24

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

2009-11-02 16:41:55

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

2009-10-22 10:10:20

VB.NET Proc

2009-10-21 16:00:26

VB.NET CASE

2009-10-23 13:14:38

2009-06-29 10:50:18

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

2009-10-13 14:19:03

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

2009-10-13 11:28:39

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

2009-11-03 10:09:48

VB.NET對(duì)象

2009-10-20 17:38:20

VB.NET exce

2009-10-13 15:09:19

VB.NET使用Tre

2009-10-09 15:59:41

VB.NET對(duì)象

2009-10-14 13:21:46

VB.NET Acco

2010-01-12 11:47:09

VB.NET可選參數(shù)

2009-10-29 11:41:27

VB.NET寫Obje

2009-10-15 17:50:48

VB.NET調(diào)用API

2010-01-14 14:21:07

點(diǎn)贊
收藏

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

主站蜘蛛池模板: 久久伊人一区 | 日韩精品视频在线免费观看 | 精品免费国产视频 | 亚洲影音先锋 | 一区二区亚洲 | 国产成人精品一区二区三区在线 | 国产极品粉嫩美女呻吟在线看人 | 精品国产欧美 | 国产亚洲一区二区三区 | 91看片网 | 欧美日韩免费视频 | 午夜私人影院在线观看 | 久久国产精品免费 | 久久69精品久久久久久久电影好 | 天天躁日日躁性色aⅴ电影 免费在线观看成年人视频 国产欧美精品 | 欧美一区二区三 | 欧美午夜影院 | 亚洲成人午夜在线 | 亚洲高清av | 一级女毛片 | 国产精品视频网址 | www.久久精品视频 | 99视频在线免费观看 | 国产免费a视频 | 一区在线视频 | 免费一区在线 | 日日夜精品视频 | 成人h动漫亚洲一区二区 | 免费视频一区二区 | 青青青伊人 | 日本精品一区二区三区视频 | 亚洲av毛片 | 欧美成视频 | 国产一级片在线观看视频 | 亚州激情| 欧美日韩网站 | 可以在线观看av的网站 | 99精品视频在线观看免费播放 | 欧美无乱码久久久免费午夜一区 | 欧美成人h版在线观看 | 羞羞的视频在线观看 |