淺析VB.NET方法創(chuàng)建
VB.NET有很多值得學(xué)習(xí)的地方,這里我們主要介紹VB.NET方法創(chuàng)建,包括介紹創(chuàng)建方法,缺省的屬性等方面的介紹。在VB.NET中方法的創(chuàng)建還是跟在VB6中的一樣,你可以使用Sub或者Function關(guān)鍵字。Sub和Function的區(qū)別是:用Sub來(lái)創(chuàng)建一個(gè)方法,它將不返回?cái)?shù)值;若是利用Function來(lái)創(chuàng)建一個(gè)方法,它將返回一個(gè)數(shù)值作為結(jié)果。例如VB.NET方法創(chuàng)建:
- Sub MyWorks()
- End Sub
- Function MyValue() As Integer
- End Function
#T#在VB.NET中我們?nèi)钥梢允褂幂犛蜿P(guān)鍵字,這跟在VB 6中的差不多,只是多了Protected。具體的轄域關(guān)鍵字有:
Private表明只能調(diào)用類中的代碼;
Friend 表明可以在我們的工程/組件中調(diào)用代碼;
Public 表明可以在我們的類外部調(diào)用代碼;
Protected是VB.NET新增的,這個(gè)我們將在討論繼承的時(shí)候再具體闡述。
Protected Friend 表明只能在我們的工程/組件調(diào)用代碼以及我們的Subclass的代碼。同樣我們將在討論繼承的時(shí)候再具體闡述。
缺省地,方法的參數(shù)是聲明為ByVal而不是ByRef。當(dāng)然,我們?nèi)匀豢梢酝ㄟ^(guò)使用ByRef關(guān)鍵字來(lái)重載這個(gè)缺省的行為。
VB.NET方法創(chuàng)建屬性
以前我們創(chuàng)建屬性的時(shí)候是使用Property Get和Property Let,但現(xiàn)在在VB.NET中已經(jīng)將它集成到一個(gè)結(jié)構(gòu)中去了。例子如下:
- Private mystrName As String
- Public Property Name() As String
- Get
- Return mystrName
- End Get
- Set
- mystrName = Value
- End Set
- End Property
VB.NET方法缺省的屬性
在VB6中創(chuàng)建類的時(shí)候,我們可以為類聲明一個(gè)缺省的方法或者屬性。具體做法可以菜單選項(xiàng):Tools(工具)->Procedure Attributes(過(guò)程屬性)并設(shè)置Procedure ID為缺省值。
VB.Net用兩種方法改變了這種行為。***,使用一個(gè)缺省的關(guān)鍵字來(lái)創(chuàng)建缺省的屬性,使得聲明更加清晰直觀。但是,VB.NET還給缺省的屬性引入了一種新的限制,即屬性必須是一個(gè)屬性陣列。
屬性陣列實(shí)際上就跟數(shù)組一樣,有一個(gè)索引。在選擇或者列表對(duì)象中的項(xiàng)目屬性就是一個(gè)例子:
- strText = MyList.Item(5)
這個(gè)項(xiàng)目屬性沒(méi)有單一的數(shù)值,而是有一組的屬性,它們可以通過(guò)索引來(lái)訪問(wèn)。
通過(guò)使用屬性陣列作為缺省屬性,我們就允許程序語(yǔ)言避免了在使用缺省屬性的多義性。正如我們?cè)赩B6中所知道的,關(guān)鍵字Set的限制是關(guān)鍵。下面再看看以下的語(yǔ)句:
- MyValue = MyObject
這句是指對(duì)象MyObject還是指它的缺省屬性呢?為了識(shí)別它,在VB6中使用了Set命令來(lái)處理對(duì)象,如不使用Set就是指缺省的屬性。在VB.NET中這條語(yǔ)句是指對(duì)象,因?yàn)槿笔〉膶傩允且凰饕?。為了得到缺省的屬性,我們要編?xiě)以下代碼:
- MyValue = MyObject(5)
因?yàn)樗饕且粋€(gè)清楚的指示器(我們指缺省的屬性,而不是MyObject本身),所以就不會(huì)有多義的存在了。
VB.NET這樣的改變就意味著屬性陣列過(guò)程必須接收一個(gè)參數(shù)。例如
- Private MyMoney(100) As String
- Default Public Property Money(ByVal Index As Integer) As String
- Get
- Money = MyMoney(index)
- End Get
- Set
- MyMoney(index) = Value
- End Set
- End Property
***,看起來(lái)這些代碼比VB6更清楚,但也會(huì)丟失了一些靈活性。在過(guò)去,我們喜歡使用缺省的屬性。舉個(gè)例子,我們?cè)谟肎UI控件的時(shí)候經(jīng)常使用缺省的屬性,比如缺省的文本屬性。
- TextBox1 = MyText
但是這在VB.NET中已經(jīng)不再有效,因?yàn)槲谋緦傩圆辉偈且粋€(gè)屬性陣列,相反地我們必須使用屬性名字。