VBNET數(shù)據(jù)語法基礎(chǔ)_第1頁
VBNET數(shù)據(jù)語法基礎(chǔ)_第2頁
VBNET數(shù)據(jù)語法基礎(chǔ)_第3頁
VBNET數(shù)據(jù)語法基礎(chǔ)_第4頁
VBNET數(shù)據(jù)語法基礎(chǔ)_第5頁
已閱讀5頁,還剩28頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

一、數(shù)據(jù)類型<一>Integer整型類型內(nèi)在分配(字節(jié))數(shù)值范圍Short2-32768~32767Int162-32768~32767UInt16(無符號)20~65535Integer4-2147483648~2147483647Int324-2147483648~2147483647UInt32(無符號)40~4294967295Long8-9223372036857755808~922337203687755807Int648-9223372036857755808~922337203687755807UInt64(無符號)80~184467440737095551615<二>浮點數(shù)浮點數(shù)也稱實型數(shù)或?qū)崝?shù),是帶有小數(shù)部分的數(shù)值。它由三部分組成:符號、指數(shù)及尾數(shù)。單精度浮點數(shù)和雙精度浮點數(shù)的指數(shù)分別用“E”(或“e”)和“D”(或“d”)來表示。(1)Single單精度浮點型這個類型用于存儲單精度浮點型數(shù)字,占用4個字節(jié),負數(shù)取值范圍在-3.402823E+38~-14.401298E-45;正數(shù)取值范圍在1.401298E+45~3.40282E38之間。(2)Double雙精度浮點型一般浮點數(shù)字都存儲為Double雙精度浮點型,可以保證很高的精度,是最常用的浮點型數(shù)字類型,占用8個字節(jié),范圍在-1.79769313486231E308~-1.79769313486232E308之間。(3)Decimal十進制VB6.0支持Currency(貸幣)數(shù)據(jù)類型,Currency變量以整數(shù)格式存儲64位數(shù)字,以10000為標(biāo)度,將數(shù)字表示為定點數(shù),其小數(shù)左邊為15位,右邊為4位。VB6.0的Currency數(shù)據(jù)類型的精度不夠,無法避免四舍五入的誤差,因些在VB.NET引入了Decimal這種數(shù)據(jù)類型。VB.NET中將Currency數(shù)據(jù)類型轉(zhuǎn)換為Decimal、Decimal變量存儲帶有符號(正負號)的96位整數(shù)。<三>字節(jié)/字符/字符串型(1)Byte字節(jié)型這個類型的數(shù)據(jù)是從0~255的無符號整數(shù),用來聲明二進制的變量,但顯示的值為十進制的。如果要聲明的變量包含二進制數(shù)據(jù),通常將其聲明為Byte型的數(shù)。例如經(jīng)常用到的顏色三組合紅黃藍即RGB三顏色分量。(2)Char字符型這是VB.NET中的單字符數(shù)據(jù)類型,默認為字符是Unicode字符,占用2個字節(jié)。常常用來聲明單字符的變量。如下:DimcharfirstAsCharCharfirst=”A”‘聲明一個Char類型的變量charfirst,并且賦給了一個值A(chǔ),字符用雙引號包括(3)String字符串型使用下列語句來聲明一個字符串變量:DimstrtextAsString可以在上述語句的最后面加上*,再加上一個正整數(shù)來指定這個字符串變量的長度。如下:DimstrtextAsString*20如果賦予字符串的長度超過了字符串的定長,那么VisualBasic.NET會自動截去超出的長度。<四>其它數(shù)據(jù)類型(1)Boolean布爾型布爾型數(shù)據(jù)表示“真(True)”或“假(False)”這樣的一種二值狀態(tài),簡單的就是計算機中的0和1,當(dāng)沒有為該類型變量賦值時,初始值為Flase或0。VB.NET的布爾值實際上有3個,+/-1都是True,而0為Flase的值。一般情況應(yīng)盡量使用True或Flase直接賦值或參與運算而不用+/-1或0代替。這種變量只占1個字節(jié)。(2)Data日期型VB.NET中用Date型變量來保存日期信息。Data在內(nèi)部存儲為64位整數(shù)(注意這里的位指整數(shù)的位數(shù)而不是字節(jié)的位數(shù))。如下:Dimdbdata1AsDataDbdata1=NOW()‘初始化dbdata1變量,得到當(dāng)前日期。(3)Object對象數(shù)據(jù)類型VB.NET用Object數(shù)據(jù)類型代替了VB6.0的Variant變體數(shù)據(jù)類型。Object變量用作指向?qū)ο蟮闹羔?。Object對象數(shù)據(jù)類型有幾個特殊值。1、Error值:指出已發(fā)生的過程中的錯誤狀態(tài)。2、DBNull值:空值,通常用于數(shù)據(jù)庫應(yīng)用程序,表示未知數(shù)據(jù)或丟失的數(shù)據(jù)??梢杂肐SBNull函數(shù)測試Object對象數(shù)據(jù)類型變量是否包含DBNull值。如下:IfISDBNull(x)andISNull(y)then2=DBNullThen2=0Endif3、Nothing值:有時需要知道是否已將一個值賦予所創(chuàng)建的變量。在賦值之前,Object對象類型變量具有值Nothing(也是空值,但表示什么都沒有)。值Nothing是不同于0,零長度字符(“”)或DBNull值的特定值。當(dāng)式中使用它,將其作為0或零長度字符串來處理,這要根據(jù)表達式來定。只要將任何值包括0,零長度字符串或DBNull()賦予Object對象類型變量,Nothing值就會消失。而將關(guān)鍵字Nothing賦予Object對象類型變量,就可將object對象類型變量恢復(fù)為Nothing。(4)枚舉類型在程序設(shè)計中,有些數(shù)據(jù)無法直接用整型數(shù)或浮點型數(shù)來表示,必須經(jīng)過某種轉(zhuǎn)換,把本來不是簡單地用整數(shù)來表示的問題硬用幾個整數(shù)去描述,因而降低了程序的可讀性。為此,VisualBasic.NET提供了枚舉數(shù)據(jù)類型。當(dāng)一個變量只有向種可能的值時,可以定義為枚舉類型。所謂“枚舉”,是指將變量的值一一列舉出來,變量的值只限于列舉出來的值的范圍內(nèi)。聲明格式如下:[Public|Private]Enumname[AsType]membname1[=initexpr1]membname2[=initexpr2]…membnamen[=initexprn]EndEnum參數(shù)說明如下:1、Public:可選。表示所定義的Enum類型在整個項目中都是可見的,在默認情況下,Enum類型被定義為Public。2、Private:可選。表示所定義的Enum類型只在聲明的模塊中是可見的。3、Enum:聲明該枚舉類型的關(guān)鍵字。4、name:所定義的Enum類型的名稱,必須合乎VB.NET的命名規(guī)則,在定義Enum類型的變量或參數(shù)時用該名稱來指定類型。5、type:可選。用來聲明枚舉及其所有成員的數(shù)據(jù)類型,可以是Byte、Integer等。如果不指定type,則默認為Integer。6、membname:枚舉成員的名稱。7、initexpr:可選。為創(chuàng)建枚舉成員時計算和分配給該成員的表達式,該表達式可以包含文本、已定義的常數(shù),另一枚舉成員或文本、常數(shù)和枚舉成員的任何組合,但不能在這個表達式里使用變量或函數(shù),只能適當(dāng)使用一些強制類型轉(zhuǎn)換函數(shù)。下面給出一些聲明枚舉變量的實例:1、在Enum語句的格式中“initexpr”可以省略。在默認情況下,枚舉中的第一個常數(shù)被初始化為0,其后的常數(shù)則初始化為比其前面的常數(shù)大1的數(shù)值。如:PublicEnumDaysSumdayMondayTuesdayWednesdayThursdayFridaySaturdayEndEnum定義了一個枚舉類型Days,它包括7個成員,都略了“initexpr”,因此常數(shù)Sunday的值為0,常數(shù)Monday的值為1,常數(shù)Tuesday的值為2,等等。2、可以用賦值的語句顯式地給枚舉中的常數(shù)賦值,即不省略“initexpr”。所賦值可以是任何長整數(shù),包括負數(shù)。如果希望用于小于0的常數(shù)代表出錯條件,則可以給枚舉常數(shù)賦一個負值。如:PublicEnumWorkDsysSaturdaySunday=0MondayTuesdayFridayInvalid=-1EndEnum在上面的枚舉中,常數(shù)Invalid顯式地賦值-1,而常數(shù)Sunday被賦值0。因為Saturday是枚舉中的第一個元素,所以也被賦值0。Monday的數(shù)值為1(比Sunday的數(shù)值大1),Tuesday的數(shù)值為2等等。3、VisualBasic.NET將枚舉中的常數(shù)數(shù)值看作整數(shù)。如果將一個浮點數(shù)值賦給一個枚舉中的常數(shù),VisualBasic.NET會將該數(shù)值取整為最接近的整數(shù)。4、當(dāng)對一個枚舉中的常數(shù)賦值時,可以使用另一個枚舉中的數(shù)值。PublicEnumWorkDaysSunday=0MondayTuesdayWednesdayThursdayFridaySaturday=Days.Sturday-6Invalid=-1EndEnum這里的Days枚舉的聲明與前面的聲明等同。注意:Enum語句只能在模塊、命名空間或文件級出現(xiàn)。這就是說可以在源文件中或者在模塊、類或結(jié)構(gòu)內(nèi)部聲明枚舉,但不能在過程內(nèi)部進行聲明。在定義Enum類型之后,就可以將其用于聲明變量類型,過程參數(shù)和Function返回值。二、復(fù)合數(shù)據(jù)類型迄今為止,我們使用的都是屬于基本數(shù)據(jù)類型或簡單數(shù)據(jù)類型(字符串、整型、實型等)的數(shù)據(jù),可以通過簡單變量名來訪問它們的元素。除基本數(shù)據(jù)類型外,VisualBasic.NET還提供了復(fù)合數(shù)據(jù)類型,包含數(shù)組、結(jié)構(gòu)和集合。復(fù)合數(shù)據(jù)類型是按照一定規(guī)則組成的元素類型的數(shù)據(jù),元素類型又稱基類型,它可以是簡單數(shù)據(jù)類型,也可以是復(fù)合數(shù)據(jù)類型。對于復(fù)合數(shù)據(jù)類型來說,不能用一個簡單變量名來訪問它的某個元素。<一>數(shù)組在實際應(yīng)用中,常常需要處理同一類型的成批數(shù)據(jù)。例如,為了處理100個學(xué)生某門課程的考試成績,可以用S1、S2、S3……S100來分別代表每個學(xué)生的分?jǐn)?shù),其中S1代表第一個學(xué)生的分?jǐn)?shù),S2代表第二個學(xué)生的分?jǐn)?shù)……。這里的S1、S2…、S100是帶有下標(biāo)的變量,通常稱為下標(biāo)變量。顯然,用一批具有相同名字、不同下標(biāo)的變量來表示同一屬性的一組數(shù)據(jù),能更清楚地表示它們之間的關(guān)系。在VisualBasic.NET中,把一組具有同一名字、不同下標(biāo)的下標(biāo)變量稱為數(shù)組。如:Str(8)。其中S稱為數(shù)組名,8是下標(biāo),上標(biāo)為0。一個數(shù)組,如果只用一個下標(biāo)就能確定一個數(shù)組元素在數(shù)組中的位置,則稱為一維數(shù)組。而由兩個或多個下標(biāo)變量所組成的數(shù)組稱為二維數(shù)組或多維數(shù)組。1、靜態(tài)數(shù)組在VisualBasic.NET里,數(shù)組下界總是從0開始,不能改變,并且它們基于數(shù)組中的元素的數(shù)量被定義。如:Dimintmyarray(10)AsInteger該元素從intmyarray(0)開始,直到intmyarray(10)結(jié)果,共11個元素。2、動態(tài)數(shù)組數(shù)組到底應(yīng)該有多大才合適,有時可能不得而知,所以希望能夠在運行時具有改變數(shù)組維數(shù)大小的能力。VisualBasic.NET中,固定大小數(shù)組通過Dim語句聲明,在些語句中必須指出數(shù)組的維數(shù)及大小。動態(tài)數(shù)組也是先在Dim語句中聲明,但不指定大小,只需要聲明其類型,即數(shù)組名后的()內(nèi)為空,最多只有“,”分隔開每個維。聲明定義之后的數(shù)組還不能直接賦值。在使用動態(tài)數(shù)組之前,再通過ReDim語句重新確定動態(tài)數(shù)組上界大小,Rem之后才可以賦值或參與運算。VisualBasic.NET中的ReDim語句僅用于為數(shù)組分配或重新分配空間,而不能重新聲明數(shù)組,一旦在最開始用Dim語句確定了其維數(shù)之后,就再也不能改變其維數(shù)的數(shù)目。如從二維擴大到三維,或從三維退到一維,唯一能改變的就是數(shù)組的大小,即數(shù)組上下界。另外,也不能通過ReDim改變數(shù)組類型。動態(tài)數(shù)組以變量作為下標(biāo)值,在程序運行過程中完成定義,通常分為兩步:首先用Dim或Public聲明一個沒有下標(biāo)的數(shù)組(括號不能省略),然后在過程中用ReDim語句定義帶下標(biāo)的數(shù)組。如:DimTestVar()AsIntegerDimSIntegerPrivateSubBubbon1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EvenArgs)HandlesButton1.Click)S=InputBox(“請輸入數(shù)組大小”,”數(shù)組輸入”,”10”ReDimTesVar(S)……EndSub該例先在窗體層用Dim語句聲明了一個空數(shù)組TesVar和一個變量S,然后在按鈕事件過程中用ReDim語句定義該數(shù)組,下標(biāo)S在運行時輸入。ReDim語句的一般格式為:ReDim[Preserve]變量(下標(biāo))該語句用來重新定義動態(tài)數(shù)組,按定義的上界重新分配存儲單元。當(dāng)重新分配動態(tài)數(shù)組時,數(shù)組中的內(nèi)容被清除,但如果ReDim語句使用了Preserve選擇項,則不清除數(shù)組內(nèi)容。在ReDim語句中可以定義多個動態(tài)數(shù)組,但每個數(shù)組必須事先用DimVariable()(一維數(shù)組)或DimVariable(,)(二維數(shù)組)這種形式進行聲明,在括號中省略上界,在用ReDim語句重新定義時指定數(shù)組下標(biāo)的上界。如:DimStuName(),Address(),City()AsStringReDimStuName(sn),Address(sn),City(sn)ReDim只能出現(xiàn)在事件過程或通用過程中,用它定義的數(shù)組是一個“臨時”數(shù)組,即在執(zhí)行數(shù)組所在的過程時為數(shù)組開辟一定的內(nèi)存空間,當(dāng)過程結(jié)束時,這部分內(nèi)存即被釋放。對動態(tài)數(shù)組的具體說明如下:(1)動態(tài)數(shù)組分兩次定義,第一次用Dim、Public、Private等語句定義,只有類型,不指定維數(shù);第二在ReDim語句定義,給出具體的維數(shù)和上界。對于一維數(shù)組來說,第一次定義時,數(shù)組名的后面帶有一對圓括號,例如temp();而對于二維數(shù)組來說,第一次定義時,數(shù)組名后面的圓括號中有一個逗號,例如temp(,),依此類推。(2)可以多次用ReDim語句定義同一個數(shù)組,隨時修改數(shù)組中元素的個數(shù),例如:PrivateSubButton1_Click(ByvalsenderAsSystem.Object,ByValeAsSystem.EvenArgs)HandlesButton1.ClickDimtemp()AsStringRemTemp(4)Temp(2)=”Microsoft”Msgbox(temp(2))ReDimtemp(6)Temp(5)=”VisualBasic.NET”Msgbox(temp(5))EndSub在事件過程中,開始時用ReDim定義的數(shù)組Temp有5個元素,然后再一次用ReDim把temp數(shù)組定義為7個元素。但是注意,只能改變元素的個數(shù),不能改變數(shù)組的維數(shù)。(3)在用ReDim重新定義動態(tài)數(shù)組時,可以使用可選的Preserver關(guān)鍵字。如果不使用該關(guān)鍵字,則原來數(shù)組中的數(shù)據(jù)將被清除,而如果使用了該關(guān)鍵字,則原來數(shù)組中的數(shù)據(jù)將被傳送到新建立的數(shù)組中。3、數(shù)組的清除和重定義數(shù)組一經(jīng)定義,便在內(nèi)在中分配了相應(yīng)的存儲空間,其大小是不能改變的。也就是說,在一個程序,同一個數(shù)組只能定義一次。有時候,可能需要清除數(shù)組的內(nèi)容或?qū)?shù)組重新定義,這時可以用Erase語句實現(xiàn)。格式為:Erase數(shù)組名[,數(shù)組名]…Erase語句用來重新初始化靜態(tài)數(shù)組的元素,或者釋放動態(tài)數(shù)組的存儲空間,它只能出現(xiàn)在過程中。注意,在Erase語句中,只給出要刷新的數(shù)組名,不帶括號和下標(biāo)。例如:EraseTest對數(shù)組清除和重定義的具體說明如下。(1)當(dāng)把Erase語句用于靜態(tài)數(shù)組時,如果這個數(shù)組是數(shù)值數(shù)組,則把數(shù)組中的所有元素置為0;如果是字符串?dāng)?shù)組,則把所有元素置為空字符串;如果是結(jié)構(gòu)數(shù)組,則根據(jù)每個元素(包括定長字符串)的類型重新進行設(shè)置。如下表:Erase語句對靜態(tài)數(shù)組的影響數(shù)組類型Erase對數(shù)組元素的影響數(shù)值數(shù)組將每個元素設(shè)為0字符串?dāng)?shù)組(變長)將每個元素設(shè)為零長度字符串(“”)Object數(shù)組將每個元素設(shè)為Empty結(jié)構(gòu)數(shù)組將每個元素作為單獨的變量來設(shè)置對象數(shù)組將每個元素設(shè)為Nothing(2)當(dāng)把Erase語句用于動態(tài)數(shù)組時,將刪除整個數(shù)組結(jié)構(gòu)并釋放數(shù)組所占用的內(nèi)存。也就是說,動態(tài)數(shù)組經(jīng)Erase后即不復(fù)存在;而靜態(tài)數(shù)組經(jīng)Erase后仍然存在,只是其內(nèi)容被清空。(3)Erase釋放動態(tài)數(shù)組所使用的內(nèi)存。在下次引用該動態(tài)數(shù)組之前,必須用ReDim語句重新定義該數(shù)組。例:編寫程序,試驗Erase語句的功能。PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickDimTest(10),iAsIntegerDebug.WriteLine(“”)Fori=0to10Test(i)=iDebug.Write(Str(Test(i))&“”)NextiEraseTestDebug.WriteLine(“”)Debug.WriteLine(“EraseTest()”)ReDimTest(12)Fori=0to12Debug.Write(Str(Text(i))&“”)NextiDebug.WriteLine(“”)Debug.WriteLine(“”)EndSub在上面的事件過程,定義了一個數(shù)組Text,用For循環(huán)語句為每個元素賦值,并輸出每個元素的值,然后執(zhí)行Erase語句,將各元素的值清除,再用ReDim語句重新定義數(shù)組Text,使得每個元素的值為0。ReDim是不能直接定義數(shù)組的,但從這個例子可以看出,在用Erase清除一個數(shù)組后,可以用ReDim語句重新定義該數(shù)組。4、默認數(shù)組與嵌套數(shù)組在VisualBasic.NET中,允許定義默認數(shù)組,并可用一個數(shù)組作為另一個數(shù)組的元素,即數(shù)組嵌套。(1)默認數(shù)組默認數(shù)組就是默認數(shù)據(jù)類型的數(shù)組。在一般情況下,定義數(shù)組應(yīng)指明其類型,如:StaticElec(100)AsInteger定義了一個數(shù)組Elec,該數(shù)組的類型為整型,它有101個元素,每個元素都是一個Integer數(shù)。如果把上面的定義改為:StaticElec(100)則定義的數(shù)組是默認數(shù)組,其類型默認為Object,因此,該定義等價于:StaticElec(1to100)AsObject從表面上看,定義默認數(shù)組似乎沒有什么意義,實際上不然。幾乎在所有的程序設(shè)計中,一個數(shù)組各個元素的數(shù)據(jù)類型都要求相同,即一個數(shù)組只能存放同一種類型的數(shù)據(jù)。而對于默認數(shù)組來說,同一個數(shù)組中可以存放各種不同的數(shù)據(jù)。因此,默認數(shù)組可以說是一種“混合數(shù)組”。請看下例:編寫程序,試驗?zāi)J數(shù)組的功能。PrivateSubForm1_Click(ByValsenderAsObject,ByValAsSystem.EvenArgs)HandlesMyBase.ClickStaticDefau(5)DimiAsShortDebug.WriteLine(“”)Defau(0)=”清華大學(xué)”Defau(1)=100Defau(2)=234.56Defau(3)=”BeiJing”Defau(4)=NowDefau(5)=&HAAFFori=0to5Debug.WriteLine(“Defau(“&i&“)=“&Defau(i))NextiEndSub該事件過程定義了一個表態(tài)數(shù)組Defau(默認數(shù)組一般應(yīng)定義為靜態(tài)的),然后對各元素賦予不同類型的數(shù)據(jù),包括整形、實型、日期和時間類型及十六進制整型。(1)嵌套數(shù)組在一般情況下,數(shù)組元素是一個具體的數(shù)據(jù)。而在VisualBasic.NET中,可以用數(shù)組作為另一個數(shù)組的元素,這樣的數(shù)組稱為嵌套數(shù)組。注意,嵌套數(shù)組必須是默認數(shù)組(即Object類型),而被嵌套的數(shù)組必須是標(biāo)準(zhǔn)數(shù)據(jù)類型數(shù)組。在實際應(yīng)用中,通常把整個被嵌套數(shù)組賦給嵌套數(shù)組中的某個元素,在賦值語句中寫上被嵌套數(shù)組的名字,后面加上一對空括號。例如:Dima(4)AsIntegerDimb(2)Fori=1to4a(i)=i*iNextib(1)=a()該例首先定義了兩個數(shù)組,其中a為整型數(shù)組,b為默認數(shù)據(jù)類型(即Object)數(shù)組,在循環(huán)語句中為數(shù)組a各元素賦值,然后執(zhí)行“b(1)=a()”,即可把數(shù)組a作為數(shù)組b的第一個元素。在這種情況下,數(shù)組a中的各元素可以這樣表示:b(1)(1)b(1)(2)b(1)(3)b(1)(4)5、數(shù)組的初始化定義數(shù)組的目的在于使用數(shù)組。而為了使用數(shù)組,就要給數(shù)組的各個元素賦初值,然后引用指定的元素。在使用數(shù)組時,通常要求數(shù)組有初值。當(dāng)然可以用賦值語句或輸入語句使數(shù)組中的元素得到值,但這樣做會占用運行時間。為些,VisualBasic.NET允許在定義數(shù)組時對各元素指定初始值,稱為數(shù)組的初始化。在VisualBasic6.0以前的版本中,數(shù)組元素的初始值用Array函數(shù)實現(xiàn),而在VisualBasic.NET中,給數(shù)組賦初始值的方法與C語言類似。(1)一維數(shù)組的初始化:Dim數(shù)組名()As類型={值1,值2,值3,……,值n}VisualBasic.NET不允許對顯式指定上界的數(shù)組進行初始化,因此“數(shù)組名”后面的括號中必須為空,根據(jù)具體初值的個數(shù)確定數(shù)組的上界,需要賦給各元素的初值放在等號后面的花括號中,數(shù)據(jù)之間用逗號隔開。如:Dima()AsShort={2,4,6,8,10}定義了一個Short型數(shù)組a,該數(shù)組有5個初值,因此數(shù)組的上界為4,即a(4)。經(jīng)過上述定義和初始化后,把花括號中的值依次賦給各數(shù)組元素,使得a(0)=2,a(1)=4,a(2)=6,a(3)=8,a(4)=10。類似地,對字符串?dāng)?shù)組也可以初始化。如:Dimc()AsString={“Liu”,”De”,”Rong”}定義了一個字符串?dāng)?shù)組c,該數(shù)組有3個初值,因此數(shù)組的上界為2,即c(3)。經(jīng)過上述定義和初始化后,把花括號中的值依次賦給數(shù)組元素,使得c(0)=”Liu”,c(1)=”De”,c(2)=”Rong”(2)二維數(shù)組的初始化:Dim數(shù)組名(,)As類型={{第一行值},{第二行值},……,{第n行值}}如:Dimarr(,)AsShort={{1,2,3,4},{5,6,7,8},{9,10,11,12}}定義了一個二維數(shù)組,它有3行4列,即arr(2,3)。(3)多維數(shù)組的初始化:與二維數(shù)組的相同。6、ForEach……Next語句ForEach……Next語句類似于For…Next語句,兩者都用來執(zhí)行指定重復(fù)次數(shù)的一組操作。但ForEach…Next語句專門用于數(shù)組或?qū)ο蟆凹稀?,其一般格式為:ForEach成員In數(shù)組循環(huán)體[ExitFor]……Next[成員]這里的“成員”是一個Object變量,它是為循環(huán)提供的,并在ForEach…Next結(jié)構(gòu)中重復(fù)使用,它實際上代表的是數(shù)組中的每個元素?!皵?shù)組”是一個數(shù)組名,沒有括號和上下界。用ForEach…Next語句可以對數(shù)組元素進行處理,包括查詢、顯示或讀取。它所重復(fù)執(zhí)行的次數(shù)由數(shù)組中元素的個數(shù)確定,也就是說,數(shù)組中有多少個元素,就自動重復(fù)執(zhí)行多少次。如:DimMyArray(5)DimxAsShortForEachxInMyArrayDebug.Write(x)Nextx將重復(fù)執(zhí)行6次(因為數(shù)組MyArray有6個元素),每次輸出數(shù)組的一個元素的值。這里的X類似于For…Next循環(huán)中的循環(huán)變量,但不需要為其提供初值和終值,而是根據(jù)數(shù)組元素的個數(shù)確定執(zhí)行循環(huán)體的次數(shù)。此外,x的值處于不斷的變化之中,開始執(zhí)行時,x是數(shù)組第一個元素的值,執(zhí)行完一次循環(huán)體后,x變?yōu)閿?shù)組第二個元素的值…,當(dāng)x為最后一個元素的值時,執(zhí)行最后一次循環(huán)。x是一個Object變量,它可以代表任何類型的數(shù)組元素??梢钥闯?,在數(shù)組操作中,F(xiàn)orEach…Next語句比For…Next語句更方便,因為它不需要指明結(jié)束循環(huán)的條件。<二>結(jié)構(gòu)結(jié)構(gòu)是一種較為復(fù)雜但非常靈活的復(fù)合數(shù)據(jù)類型,一個結(jié)構(gòu)類型可以由若干個稱為成員(或域)的成分組成。根據(jù)需要,不同的結(jié)構(gòu)類型可以包含不同的成員。在程序設(shè)計中,結(jié)構(gòu)有著重要的作用。1、引例在實際應(yīng)用中,有時候需要將不同的數(shù)據(jù)組合成一個有機的整體,以便于引用。這些組合在一個整體中的數(shù)據(jù)是互相聯(lián)系的。例如,在一個學(xué)術(shù)團體中,為了與會員進行聯(lián)系,需要建立一個會員通信錄,這個通信錄包括會員證號(num)、姓名(name)、職稱(tilte)、通信地址(addr)、郵政編碼(zip)和電話號碼(tel)等數(shù)據(jù),每種數(shù)據(jù)的類型和長度不同,但都反映出會員有關(guān)通信方面的屬性,因此用程序處理這些數(shù)據(jù)時,也希望構(gòu)造出一種能把上述屬于不同類型的數(shù)據(jù)作為一個整體來處理的數(shù)據(jù)類型。使用VisualBasic.NET中的“結(jié)構(gòu)”,可以定義如下:PublicStucturemailPublicnumAsShort‘會員證號(短整型)PublicnameAsString‘姓名(字符串)PublictitleAsString‘職稱(字符串)PublicaddrAsString‘通信地址(字符串)PubliczipAsInteger‘郵政編碼(整型)PublictelAsString‘電話號碼(字符串)EndStructure上面定義了一個結(jié)構(gòu)類型,其中Structure是VisualBasic.NET關(guān)鍵字,main是“結(jié)構(gòu)名”,在Structuremain和EndStructure之間的部分是該結(jié)構(gòu)中的各個成員,每個成員稱為結(jié)構(gòu)中的一個域,以分號隔開,由它們組成一個結(jié)構(gòu)。上面定義了一個結(jié)構(gòu)類型,我們可以建立一個會員通信錄。假定會員王大明已經(jīng)登錄了與他通信聯(lián)系有關(guān)的數(shù)據(jù),遇可以編寫一個包含些結(jié)構(gòu)的程序來處理這些數(shù)據(jù)。王大明有關(guān)信息編號姓名(name)職稱(title)地址(arr)郵編(zip)電話(tel)1王大明教授北京10008462781722用結(jié)構(gòu)類型記錄和顯示會員王大明有關(guān)通信聯(lián)系的信息。PublicStructuremainPublicnumAsShortPublicnameAsStringPublictitleAsStringPublicaddrAsStringPubliczipAsIntegerPublictelAsStringEndStructurePrivateSubForm1_Click(ByValSenderAsObject,ByValeAsSystem.EventArgs)HandlesMyBse.ClickDimmember1Asmail‘定義結(jié)構(gòu)變量DimspaAsString=””‘對結(jié)構(gòu)各個成員賦值Member1.num=1M=”王大明”Member1.title=”教授”Member1.addr=”北京”Member1.zip=100084Member1.tel=”62781722‘通過結(jié)構(gòu)變量分別引用結(jié)構(gòu)的各個成員Debug.WriteLine(“”)Debug.write(“numnametitleaddr”)Debug.WriteLine(“ziptel”)Debug.Write(“-----------------------------------------“)Debug.WriteLine(“---------------------------------“)Debug.Write(“”&member1.num&spa&)Debug.Write(spa&mamber1.title&““&spa&member1.addr)Debug.WriteLine(““&member1.zip&spa&member1.tel)EndSub這個程序很簡單,但它是一個能在機器上運行的程序,其中所涉及的結(jié)構(gòu)變量的定義、賦值和引用等操作將在后面詳述,讀者先初步理解這個程序,如果能上機運行一下,則對理解后面的內(nèi)容會有所幫助。2、結(jié)構(gòu)類型與結(jié)構(gòu)變量的定義(1)定義結(jié)構(gòu)類型的一般格式如下:[{Public|Friend|Private|Dim}]Structure結(jié)構(gòu)名變量聲明[過程聲明]EndStructure結(jié)構(gòu)類型的定義以Structure開始,以EndStructure結(jié)束,格式中各部分的含義如下:①Public或Dim:可選。用Public關(guān)鍵字聲明的結(jié)構(gòu)具有公共訪問權(quán)限。對于公共結(jié)構(gòu)的可訪問性沒有任何限制。②Friend:可選:用Friend關(guān)鍵字聲明的結(jié)構(gòu)具有友元訪問權(quán)限,可以從包含其聲明的程序中以及同一程序集中的其他任何地方訪問它們。③Private:可選。用Private修飾符聲明的結(jié)構(gòu)具有私有訪問權(quán)限,只能在同一模塊中訪問。④結(jié)構(gòu)名:必需。要定義的結(jié)構(gòu)的名稱,必須是有效的VisualBasic.NET標(biāo)識符。⑤變量聲明:必需。一個或多個Dim、Private或Public語句,聲明作為結(jié)構(gòu)的數(shù)據(jù)成員的變量或事件。這些聲明與普通變量聲明一樣,遵循相同的規(guī)則。也可以在結(jié)構(gòu)中定義常數(shù)或?qū)傩?,但必須至少聲明一個變量或事件。⑥過程聲明:可選:作為結(jié)構(gòu)的方法成員的0個或多個Function、Property或Sub過程的聲明。這些聲明與在結(jié)構(gòu)外一樣,遵循相同的規(guī)則。上面格式中的Structure是VisualBasic.NET的關(guān)鍵字,表示要定義的類型是結(jié)構(gòu),“結(jié)構(gòu)名”是程序設(shè)計者自己取的名字,它應(yīng)該是VisualBasic.NET合法的標(biāo)識符,如前面例子中定義的會員通信結(jié)構(gòu)類型中的“mail”。Structrue和“結(jié)構(gòu)名”之間至少要有一個空格。在Structur和EndStructure之間的部分是該結(jié)構(gòu)的成員,一個結(jié)構(gòu)內(nèi)至少要有一個變量聲明或事件聲明成員,每一個成員秒為結(jié)構(gòu)中的一個域,成員名的命名規(guī)則與變量名相同,但不能稱為變量名,具體原因后面還要談到。所有成員組成“成員表列”,也稱為“域表”。因此,結(jié)構(gòu)定義的一般形式也可以寫成:Structure結(jié)構(gòu)名成員表列EndStructure使用結(jié)構(gòu)時應(yīng)注意如下事項。①Structur語句只能在模塊、名稱空間或文件級出現(xiàn)。也就是說,可以在源文件或模塊、接口或類內(nèi)部聲明結(jié)構(gòu),但不能在過程內(nèi)部聲明。結(jié)構(gòu)可以嵌套,即可以在一個結(jié)構(gòu)中定義另一個結(jié)構(gòu),但不能通過外部結(jié)構(gòu)訪問內(nèi)部結(jié)構(gòu)的成員,必須聲明一個內(nèi)部結(jié)構(gòu)的數(shù)據(jù)類型變量。②默認情況下,結(jié)構(gòu)為Friend。如果要具體地指定可訪問性,則應(yīng)在Structure語句中含有Public、Friend或Private。③結(jié)構(gòu)中的每一個數(shù)據(jù)成員都必須顯式聲明。這意味著“變量聲明”部分中的每一個語句都必須使用Dim、Friend、Private或Public。如果OptionStrict是On,則在每個語句中還必須包含As子句。用Dim聲明的成員的訪問性默認為Public,未用As子句聲明的成員默認為Object數(shù)據(jù)類型。④變量、常量、屬性、過程、事件均可作為結(jié)構(gòu)的成員,但是,在結(jié)構(gòu)中必須至少定義一個非共享變量或事件。在結(jié)構(gòu)中不能只包含常數(shù)、屬性和過程。(2)定義結(jié)構(gòu)類型變量結(jié)構(gòu)類型反映了所處理對象的抽象特征,如上面例子定義的結(jié)構(gòu)類型描述了學(xué)術(shù)團體中所有會員共有一些特點,而具體到每個會員時,則定義了一個結(jié)構(gòu)類型變量member1來存放和處理這個會員的具體數(shù)據(jù)。結(jié)構(gòu)類型變量(簡稱結(jié)構(gòu)變量)的定義與普通變量的定義類似,格式如下:{Dim|Public|Private}變量名1,變量名2,……,變量名nAs結(jié)構(gòu)名或簡寫為:{Dim|Public|Private}變量名表列As結(jié)構(gòu)名例如,在前面的例子中,定義了結(jié)構(gòu)mail的一個變量:Dimmember1Asmail定義了一種結(jié)構(gòu)類型后,可以用它定義多個具有相同結(jié)構(gòu)的結(jié)構(gòu)變量。例如,假定新增加一個會員,其姓名、通信地址等數(shù)據(jù)如下表:編號姓名(name)職稱(title)地址(arr)郵編(zip)電話(tel)2張紅講師上海20023765372486Member1和member2兩個變量可在同一行中定義,變量之間用“,”號分開,即:Dimmember1,member2Asmail(3)結(jié)構(gòu)的嵌套結(jié)構(gòu)內(nèi)的成員可以是基本數(shù)據(jù)類型,如Integer、String、Sing型等,也可以是構(gòu)造數(shù)據(jù)類型(如數(shù)組)。在前面定義的結(jié)構(gòu)類型mail中,只包含基本類型數(shù)據(jù)。結(jié)構(gòu)成員還可以是已定義的另一個結(jié)構(gòu)類型,稱為結(jié)構(gòu)的嵌套定義。例如,一個電話號碼可分為地區(qū)號,直撥號和分機號三部分。如下表:編號姓名職稱通信地址郵編電話地區(qū)號直撥號分機號利用上表的數(shù)據(jù),可以定義一個嵌套結(jié)構(gòu):PublicStructuretelephonePublicareaAsShort‘定義電話號碼結(jié)構(gòu)類型PublictelAsInteger‘地區(qū)號,占2個字節(jié)PublicextAsShort‘分機號,占2個字節(jié)EndStructurePrivageStructuremail_embed‘定義會員通信錄結(jié)構(gòu)類型PublicnumAsShortPublicnameAsStringPublictitleAsStringPublicaddrAsStringPubliczipAsIntegerDimphoneAstelephone‘定義結(jié)構(gòu)成員phoneEndStructure其中phone是結(jié)構(gòu)mail_embed的一個成員,這個成員被定義為另一種結(jié)構(gòu)類型,這個結(jié)構(gòu)類型描述了一個電話號碼的各個部分。這樣定義的電話號碼可以方便地處理地區(qū)號、總機號和分機號,而且只占8字節(jié)存儲單元,比前面用字符數(shù)組的定義節(jié)省空間。要注意定義的順序,在定義phone為telephone類型之前,結(jié)構(gòu)類型telephone必須已定義過。3、結(jié)構(gòu)變量的初始化及其引用(1)結(jié)構(gòu)變量的初始化與普通變量一樣,結(jié)構(gòu)變量在使用前也必須具有確定的值。對于結(jié)構(gòu)變量來說,只能賦值語句對結(jié)構(gòu)各個成員分別賦值。例如在前面的例中,定義了結(jié)構(gòu)變量member1后,用下面語句:Member1.num=1M=”王大明”Member1.title=”教授”Member1.addr=”北京”Member1.zip=100084Member1.tel=”62781722分別給member1變量的各個成員賦值作為初值。(2)結(jié)構(gòu)變量的引用及操作在定義了結(jié)構(gòu)變量之后,就可以引用這個變量,進行賦值、運算輸入和輸出等操作,一般規(guī)則如下:①成員引用。結(jié)構(gòu)由不同類型的成員組成,而通常參加運算的是結(jié)構(gòu)變量中的各個成員,引用時要在結(jié)構(gòu)變量后面寫上參加運算成員名,一般形式為:結(jié)構(gòu)變量.成員名②嵌套引用。如果在嵌套結(jié)構(gòu)中,一個結(jié)構(gòu)的成員本身又是一種結(jié)構(gòu)類型,同在引用時需要用多個成員運算符,按上述規(guī)則一級一級地找到最低的一級成員,最后對最低級的成員進行訪問。例如,假定有如下的結(jié)構(gòu)和結(jié)構(gòu)變量定義:PublicStructuretelephonePublicareaAsShort‘定義電話號碼結(jié)構(gòu)類型PublictelAsInteger‘地區(qū)號,占2個字節(jié)PublicextAsShort‘分機號,占2個字節(jié)EndStructurePrivageStructuremail_embed‘定義會員通信錄結(jié)構(gòu)類型PublicnumAsShortPublicnameAsStringPublictitleAsStringPublicaddrAsStringPubliczipAsIntegerDimphoneAstelephone‘定義結(jié)構(gòu)成員phoneEndStructure對嵌套定義的結(jié)構(gòu)變量embed_mem1,訪問其成員時可寫成:embed_mem1.phone.areaembed_mem1.phone.telembed_mem1.phone.ext③成員變量的運算。結(jié)構(gòu)成員變量根據(jù)其類型可以像普通變量一樣進行各種運算和輸入輸出。例如:Member2.num=member1.mun+1‘會員1的會員加1作為會員2的會員號Num=member2.num+member1.num‘累計已登錄的會員數(shù)在上面的語句中,假定普通變量num與結(jié)構(gòu)變量member1、member2在同一個函數(shù)中,也定義為Short類型,則它也被分配一個內(nèi)存單元,但它不在分配給結(jié)構(gòu)變量member1或member2的內(nèi)存范圍內(nèi)。因此,雖然num與member1和member2的成員名num相同,但它們不會發(fā)生沖突??梢詫Y(jié)構(gòu)變量成員進行各種運算,如算術(shù)、賦值、關(guān)系運算、邏輯運算等,允許其運算的種類與相同類型的簡單變量的運算種類相同。④整體賦值。VisualBasic.NET允許將一個結(jié)構(gòu)變量作為一個整體賦值給一結(jié)構(gòu)變量,如:member2=member1這個賦值語句將結(jié)構(gòu)變量member1中各個成員的值依次賦給結(jié)構(gòu)變量member2中相應(yīng)的各個成員。其前提條件是:這兩個結(jié)構(gòu)變量的類型相同,即二都中成員個婁、類型、長度的定義均相同。這一規(guī)則也適用于嵌套結(jié)構(gòu)類型的變量。如:embed_mem1.phone=embed_mem2.phone4、結(jié)構(gòu)數(shù)組一個結(jié)構(gòu)變量中可以存放一組數(shù)據(jù)(如一個學(xué)生的學(xué)號、姓名、成績等數(shù)據(jù))。如果有10個學(xué)生的數(shù)據(jù)需要參加運算,顯然應(yīng)使用數(shù)組,這就是結(jié)構(gòu)數(shù)組。與數(shù)值型數(shù)組不同,結(jié)構(gòu)數(shù)組的每個元素都是一個結(jié)構(gòu)類型的數(shù)據(jù),它們都分別包括各個成員項。前面我們定義了一個名為mail的結(jié)構(gòu)類型,用來描述一個學(xué)術(shù)團體中會員的有關(guān)通信聯(lián)系等方面的屬性,并先后定義了兩個結(jié)構(gòu)變量member1和member2,分別存放會員“王大明”和“張虹”的一組數(shù)據(jù)。如果這個學(xué)術(shù)團體的會員有幾百個,則可以把具有相同結(jié)構(gòu)類型的變量組成一個數(shù)組,也下表:數(shù)組的每一個元素都是結(jié)構(gòu)變量,這種數(shù)據(jù)類型稱為結(jié)構(gòu)數(shù)組。數(shù)組編號(num)姓名(name)職稱(title)地址(addr)郵編(zip)電話(tel)List(0)8001王大明教授北京10008462781722List(1)8002張虹講師上海20023765372486List(2)8003李洪華副教授天津30011027639268…List(99)800100劉德榮CEO高州52013141314520定義結(jié)構(gòu)數(shù)組的一般格式為:Dim數(shù)組名(上界限)As結(jié)構(gòu)名例如,假定定義了以下常量和結(jié)構(gòu)類型:ConstMAX_MEM=99PrivateStructuremail‘定義會員通信錄結(jié)構(gòu)類型PublicnumAsShortPublicnameAsStringPublictitleAsStringPublicaddrAsStringPubliczipAsIntegerPublictelAsStringEndStructure則可以用下面的語句定義一個結(jié)構(gòu)數(shù)組:Dimlist(MAX_MEM)Asmail用上面的語句定義的結(jié)構(gòu)數(shù)組名為list,它的上界為99,即存放100個數(shù)組元素,每個數(shù)組元素都是一個結(jié)構(gòu)變量。一個結(jié)構(gòu)數(shù)組元素相當(dāng)于一個結(jié)構(gòu)變量,因此,前面介紹的關(guān)于結(jié)構(gòu)變量的引用規(guī)則,同樣適用于結(jié)構(gòu)數(shù)組元素。而數(shù)組元素之間的關(guān)系和引用規(guī)則與以前介紹過的數(shù)值數(shù)組的規(guī)定相同。下面簡單歸納幾點,然后舉例說明結(jié)構(gòu)數(shù)組的引用方法和用途。(1)引用某一結(jié)構(gòu)數(shù)組元素的成員,用以下形式:結(jié)構(gòu)數(shù)組名(下標(biāo)).成員名例如:List(2).num引用的是數(shù)組list第三個元素的num(編號)成員。(2)可以將一個結(jié)構(gòu)數(shù)組元素賦給該結(jié)構(gòu)數(shù)組中的另一個元素,或賦給同一類型的結(jié)構(gòu)變量,例如下面的賦值語句是合法的:List(0)=list(1)這兩個數(shù)組元素都有同一結(jié)構(gòu)類型,因此它符合結(jié)構(gòu)的整體賦值規(guī)則。(3)不能把結(jié)構(gòu)數(shù)組元素作為一個整體直接輸入輸出,如:Debug.WriteLine(list(0))是錯誤的。只能以單個成員為變量輸入輸出。Debug.WriteLine(list(0).num)<三>集合在VisualBasic.NET中,可以把數(shù)據(jù)項放到集合(Collection)對象中。它類似于數(shù)組,但可以用比數(shù)組更靈活、更有效的方式處理集合中的數(shù)據(jù)項(元素)。集合對象特別適合用來保存對象引用,同時也適合保存VisualBasic.NET的其他數(shù)據(jù)類型。與數(shù)組相比,集合有著明顯的優(yōu)勢,例如:集合比數(shù)組占用的內(nèi)存少;集合具有更靈活的索引功能;集合提供了增加和刪除成員的方法;當(dāng)增加或刪除一個集合中的成員時,不需要像數(shù)組那樣執(zhí)行ReDim。在VisualBasic.NET中,集合類似于一個型數(shù)據(jù)庫,可能很容易地插入或刪除數(shù)據(jù)。同時,在集合中還可以混用多種不同的數(shù)據(jù)類型。為了更新或修改數(shù)組中的元素,有時候可能需要量編寫大量的程序代碼。而在集合中可以十分方便地插入或刪除種內(nèi)容(控件除外)。此外,也可以把集合合作為數(shù)組使用。1、建立集合并向集合中添加項目和窗體一樣,集合是一個預(yù)定義的對象,為了建立一個集合,必須選建立一個Collection類的實例,格式為:Dim集合名AsNewCollection()例如:DimXAsNewCollection()建立一個名為X的集合。對象集合可以目執(zhí)行三種主要的操作,即向集合中添加(或插入)數(shù)據(jù)項,從集合中刪除數(shù)據(jù)項和查找集合中的成員,這些操作通過下面的方法來實現(xiàn):Add方法:向集合中增加項目;Item方法:通過索引或分健值返回一個項目;Remove方法:通過索引或鍵值從集合中刪除一個項目。除上述方法外,集合對象還有一個只讀屬性,即Count,它返回集合中數(shù)據(jù)的個數(shù)。用Add方法可以把一個新成員加入到集合對象。用關(guān)鍵字New建立了一個集合對象后,就可以用Add方法向集合中添加數(shù)據(jù)項。格式為:Object.Add.item[,Key][,Before][,After]Add方法帶有多個參數(shù),各參數(shù)含義如下:object:用New關(guān)鍵字建立的集合對象。item:加到集合中的數(shù)據(jù)項,可以是任何類型。如果要顯式聲明,則通常把它聲明為對象(object)數(shù)據(jù)類型。這就是說,在一個集合中,可以混用多種數(shù)據(jù)類型。Key:是一個字符串表達式,它是與集合成員相關(guān)聯(lián)的關(guān)鍵字,可以作為索引值使用,用來標(biāo)識集合中一個成員。Before:是一個長整型的數(shù)值表達式,其取值范圍為1到成員總數(shù)(即Count屬性值)之間,用來指定插入或刪除集合成員的位置,插入或刪除的成員位于Before參數(shù)指定的成員之前。該參數(shù)也可以使用字符串,它與相應(yīng)成員的關(guān)鍵字匹配。After:與Before類似,但插入或刪除的成員位于After參數(shù)指定的成員之后。在上面的參數(shù)中,Object是集合對象,必須先定義。后面4個參數(shù)中,只有Item,只有Item參數(shù)是必需的,其他三個參數(shù)均可略。用下面的程序可以把數(shù)據(jù)項加到集合中:PrivateSubForm1_Click(ByValsenderAsObject,ByValeAsSystem.EventArgs)HandlesMyBase.ClicDimiAsShortDimMyNamesAsNewCollection()DimxFori=1to10MyNames.Add(Item:=”Name”&i,Key:”Key#”&i)NextiEndSub該例首先聲明了一個集合對象MyName,單擊窗體,即可把10個數(shù)據(jù)項加到MyNames集合中。每個數(shù)據(jù)項都以“Name”開頭,后面跟著一個數(shù)字。第一個數(shù)氨基同為”Naem1”,第二個數(shù)據(jù)項為“Name2”,……,最后一個數(shù)據(jù)項為“Name10”MsgBox(MyNames(3))MsgBox(MyName(“Key#8”分別輸出Name3和Name8,前一個語句通過下標(biāo)訪問集合成員,而后一個語句通過關(guān)鍵字訪問集合成員。為了輸出集合中的每個成員可以使用For…Next循環(huán),例如:PivateSubForm1_Click(ByValsenderAsObject,ByValcAsSystem.EventArgs)HandelesMyBase.ClickDimiAsShortDimMyNamesAsNewCollection()Fori=1To10MyNames.Add(Item:=”Name”&i,Key:=”Key#”&i)NextiFori=1to10Debug.WriteLine(MyNames(i))NextEndSub上述程序首先把10具數(shù)據(jù)項加到集合中,然后用For…Next循環(huán)輸出這10個數(shù)據(jù)項??梢钥闯?,這種方式與數(shù)組元素的輸出操作基本相同。當(dāng)確切地知道集合中的成員個數(shù)時,用For…Next循環(huán)可以輸出集合中的每個成員。但是,如果頻繁地對集合進行增、刪操作,則可能記不清集合中到底有多少成員在這種情況下,可以通過Count屬性確定集合中的成員個數(shù)。在上面的例子中,可以用MyNames.Count作為循環(huán)的組終值。不過,最好的辦法是使用ForEach…語句。例如,用下面的ForEach…Next循環(huán)可以輸出前面建立的集合中的成員:ForEach成員In數(shù)組Debug.WriteLine(elem)Nextelem建立集合時應(yīng)注意如下事項。集合中的成員可以是同一種類型的數(shù)據(jù),也可以混合使用多種數(shù)據(jù)。例如:PrivateSubForm1_Click(ByValsenderAsObject,ByValeAsSystem.EventArgs)HandlesMyBase.ClickDimanyTypeAsNewCollection()Dimx,aAsObjectX=”VisualBasic.NET”anyType.Add(x)x=246anyType.Add()anyType.Add(Now)anyType.Add(9876.5436)anyType.Add(“微型計算機”)ForEacyaInanyTypeDebug.WriteLine(a)NextaEndSub上述程序把多種類型的數(shù)據(jù)加入集合中,然后在“輸出”窗口中提示這些數(shù)據(jù)。Add方法中的參數(shù)可能使用“位置”結(jié)合方式,也中以使用“指名”結(jié)合方式。如果使用位置結(jié)合方式,則必須按Item、Key、Before、After的順序給出;而如果使用指名方式,可以不按順序,但必須給出參數(shù)的名字,并使用“:=”。例如:PrivateSubForm1_Click(ByValsenderAsObject,ByValeAsSystem.EventArgs)HandlesMyBase.ClickDimxAsObjectDimy,iAsShortDimMyNamesAsNewCollection()y=1Fori=1to10MyNames.Add(Item:=”Name”&i,Key:=”Key#”&i)NextiMyNames.Add(Item:=”Thisisanewoneinserted”,before:=8)MyNames.Add(Item:=”這是新插入的一行”,after:=4)ForEachxInMyNamesDebug.WriteLine(“Line:”&y&“:”&x)y=y+1NextxEndSub上述程序用指名參數(shù)方式向集合中加入數(shù)據(jù)項。它首先用For…Next循環(huán)加入10個數(shù)據(jù)項,然后用Before和After參數(shù)把兩個字符串插入已建立的集合中。運行程序如下圖所示:用指名參數(shù)方式可以提高程序的可讀性,并能減少錯誤。實際上,由于Before和After參數(shù)不能同時出現(xiàn)在一個Add方法中,VisualBasic.NET不允許按“位置”結(jié)合方式使用這兩個參數(shù),必須使用“指名”結(jié)合方式。參數(shù)Key是一個字符串表達式,在一個集合中,它必須是唯一的,否則在運行時將會產(chǎn)生錯誤。此外,當(dāng)通過關(guān)鍵字訪問集合中的一個成員時,所給出的關(guān)鍵字與集合中的關(guān)鍵字必須嚴(yán)格匹配(包括大小字)。2、集合成員的刪除和檢索(1)集合成員的刪除集合成員通過Remove方法來刪除,其格式如下:Object.RemoveIndex其中“Index”來指定想要刪除的集合成員。它可以是數(shù)值(類似于傳統(tǒng)數(shù)組中的下標(biāo))或數(shù)值表達式,也可以是集合成員的關(guān)鍵字,但不能是作為集合成員的實際字符串。例如,假定一個名為colWorkOrders的集合的第三個元素的關(guān)鍵字為“w017493”colWorkOrders.Remove3或colWorkOrders.Remove3在前面的例子中,為了刪除集合中的第4個成員和第7個成員,可以在程序中增加下面兩行語句(加在ForEach…Next循環(huán)前面):MyNames.Remove4MyNames.Remove“Key#7運行修改后的程序,輸出結(jié)果如下:從圖中可以看出,刪除兩個成員后,將自動調(diào)整各成員的索引值。用下面兩種方法可以刪除一個集合中的所有成員:Fori=1toMyNames.CountMyNames.Remove1Nexti或ForEachxInMyNamesMyNames.Remove1Nextx在上面的循環(huán)中,每次都刪除集合中的第一個元素,當(dāng)循環(huán)結(jié)束后,即可把集合中的元素全部刪除。這是因為,集合中元素的索引號(即下標(biāo))為1到Count,刪除第一個元素后,第二個元素自動變?yōu)榈谝粋€元素,后面元素的下標(biāo)依次前移。這樣,只要連續(xù)刪除第一個元素,就能刪除集合中的全部元素。(2)檢索集合中指定的成員用Item方法可以指向(或返回)集合中某個具體的成員,其格式為:Object.ItemIndex和Remove方法一樣,“Index”可以是成員在集合中的位置,也可以是成員的關(guān)鍵字。用下面的語句可以把集合中的第三個元素賦給一個變量。woCurrent=MyNames.Item(3)或woCurrent=MyNames.Item(“Key#3”Item方法是集合對象的默認方法,當(dāng)訪問一個集合的成員時可以將其省略。上面的兩個語句可以改寫為:woCurrent=MyNames(3)或woCurrent=MyNames(“Key#3”在下面的例子中,用Item方法指定集合中的元素,并分別把它們賦給不同的變量:PrivateSubForm1_Click(ByValsenderAsObject,ByValeAsSystem.EventArgs)HandlesMyBase.ClickDimiAsShortDimMyName1,MyName2,MyName3DimMyNamesAsNewCollection()Fori=1To10MyNames.Add(Item:="Name"&i,Key:="Key#"&i)NextiMyNames.Add(Item:="Name"&i,Key:="Key#"&i)MyNames.Add(Item:="Thisisanewoneinserted",Before:=8)MyNames.Add(Item:="這是新插入的一行",After:=4)Debug.WriteLine("")MyName1=MyNames.Item(5)MyName2=MyNames(8)MyName3=MyNames(9)Debug.WriteLine(MyName1)Debug.WriteLine(MyName2)Debug.WriteLine(MyName3)EndSub程序運行結(jié)果如下:用Item方法返回指定的集合成員。注意,當(dāng)增加或刪除集合成員時,集合對象自動地維護其索引號,集合中某個元素的索引號處于動態(tài)變化中。因此,不要試圖通過保存一個索引值來對集合中相應(yīng)的成員進行操作。如果想這樣做,可以使用關(guān)鍵字,因為關(guān)鍵字是不會改變的。三、數(shù)據(jù)類型轉(zhuǎn)換在實際應(yīng)用中有時我們往往需要進行不同數(shù)據(jù)之間的操作運算,這時就必須轉(zhuǎn)換數(shù)據(jù)類型。VB.NET提供了兩種轉(zhuǎn)換數(shù)據(jù)類型的方法:一是通過轉(zhuǎn)換函數(shù)實現(xiàn);二是通過對象化轉(zhuǎn)換實現(xiàn)。<一>轉(zhuǎn)換函數(shù)(1)數(shù)據(jù)類型轉(zhuǎn)換函數(shù)表轉(zhuǎn)換函數(shù)轉(zhuǎn)換后的數(shù)據(jù)類型轉(zhuǎn)換函數(shù)轉(zhuǎn)換后的數(shù)據(jù)類型CBoolBooleanCIntIntegerCByteByteCLongLongCCharCharCObjObjectCDateDateCShortShortCDblDoubleCSngSingleCDecDecimalCStrString(2)數(shù)據(jù)類型轉(zhuǎn)換方法用CStr函數(shù)將數(shù)據(jù)轉(zhuǎn)換為字符串型StringDimintDataAsIntegerDimstrDatAsStringintData=8strDat=CStr(intData)<二>對象化轉(zhuǎn)換方法VB.NET已經(jīng)是完全對象化的語言了,聲明時的變量、常量、數(shù)組,甚至一個數(shù)字都可看作一個對象。(1)數(shù)據(jù)類型對象化轉(zhuǎn)換方法對象化轉(zhuǎn)換方法轉(zhuǎn)換后的數(shù)據(jù)類型對象化轉(zhuǎn)換方法轉(zhuǎn)換后的數(shù)據(jù)類型ToBooleanBooleanToInt32有符號32位整型ToByteByteToInt64有符號64位整型ToCharCharToSingleSingToDatatimeDateToStringStringToDoubleDoubleToUint16無符號16位整型ToInt16有符號16位整型ToUint32無符號32位整型(2)對象化轉(zhuǎn)換方法用ToString方法將數(shù)據(jù)轉(zhuǎn)換成String型。DimintDataAsIntegerDimstrDataAsStringintData=9strData=intData.ToString四、變量與常量<一>變量的命名規(guī)則(1)必須以字母開頭,由字母、數(shù)字和下劃線組成。(2)不得超255個字符。(3)不能是VB.NET中的關(guān)鍵字<二>變量的作用域與聲明根據(jù)定義位置和使用的變量定義語句的不同,VisualBasic.NET中的變量可能分為4個級別,即代碼塊(Block)級變量、過程(Procedure)級變量、模塊(Module)級變量及公用(Public)變量,各種變量位于不同的層次。1、代碼塊級變量代碼塊是一個程序段,它通常指的是一個控制結(jié)構(gòu),例如If…End…EndIf、For…Next等。例如,在窗體上畫一個按鈕,然后編寫如下代碼:PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeSystem.EventArgs)HandlesButton1.ClickDimaAsShort=100‘過程級變量Ifa>=100thenDimbAsInteger‘代碼塊級變量B=a*aMsgbox(b)EndifMsgbox(b)‘此名將出錯,回為b是代碼塊級變量,只在if…Endif之間有效。EndSub在上面的程序中,變量b是代碼塊級變量,它的作用域是If…EndIf之內(nèi),如果代碼塊外引用變量b,則會出錯。代碼塊級變量通過Dim語句聲明2、過程級變量在過程(事件過程或通過過程)內(nèi)聲明的變量稱為過程級變量,也稱局部變量,可以用Dim或Static聲明,其作用域是它所在的過程。過程級變量通常用來存放中間結(jié)果或用作臨時變量。某一過程的執(zhí)行只對該過程內(nèi)的變量產(chǎn)生作用,對其他的過程中相同名字的過程級變量沒有任何影響。因此,在不同的過程中定義相同的過程級變量,它們之間沒有任何關(guān)系。如果需要,則可以通過“過程名.變量名”的形式分別引用不同過程中相同名字的變量。局部變量在過程內(nèi)用Dim、Static聲明,例如:SubCommand1_Click()DimTempnumAsIntegerStaticTotalAsDouble……EndSub在上面的過程中,定義了兩個過程級變量,即整型變量Tempnum和又精度靜太變量Total。3、模塊級變量前面我們曾多次提到“模塊”。在VisualBasic.NET中,模塊通常指的是一個類。窗體是一個類,可以稱為窗體模塊。為了方便起見,“模塊極”對于模塊、類的結(jié)構(gòu)是等價的。在模塊、類或結(jié)構(gòu)中的過程和代碼塊之外聲明的變量就是模塊級變量。模塊級變量可用于該模塊內(nèi)的所有過程。一個窗體模塊可以含有若干個過程(事件過程或通過過程),這些過程連同窗體一起存入窗體文件(.vb)中。當(dāng)同一個窗體內(nèi)的不同過程使用相同的變量時,必須定義窗體層變量。在使用模塊級變量前,必須聲明,也就是說,模塊級變量不能隱式聲明。在默認情況下,模塊級變量對模塊中的所有過程都是可見的,模塊級變量用Private或Dim聲明。例如:PrivateintTempAsInteger或DimintTempAsInteger在聲明模塊級變量時,Private和Dim沒有什么區(qū)別,但Private更好些,因為可以把它和聲明公用變量的Public區(qū)別開來,使代碼更容易理解。4、公用變量公用變量也稱全局變量,其作用域最大,可以在項目的每個模塊、每個過程中使用。公用變量在模塊中聲明使用的關(guān)鍵字是Public,不能用Dim語句聲明,更不能用Private語句聲明;同時,公用變量只能在模塊的聲明部分中聲明,不能在過程中聲明。模塊通過“項目”菜單中的“添加模塊”命令來建立。變量的作用域使用表名稱作用域聲明位置使用語句代碼塊級變量代碼塊代碼塊內(nèi)Dim過程級變量過程過程中Dim或Static模塊級變量模塊內(nèi)類或模塊中所有過程之外Dim或Private公用變量項目內(nèi)模塊中所有過程之外Public<三>變量的命名約定為了提高程序代碼的可讀情和可持續(xù)發(fā)展性,一般建議使用以下的命名約定。1、根據(jù)不同的變量類型,系統(tǒng)有規(guī)定的后綴符號表示變量類型后綴例子Integer%Number%Long&ID&Decimal@Inmony@Double#Pai#Single!Color!String$Stuname$2、根據(jù)不同的變量類型,以前綴的方式變量進行命名變量類型前綴例子BooleanBlnBlnIscorrectByteBytCharChrChrSexDataDatDatLasDayDecimalDecDecCashDoubleDblDblpaiIntegerIntIntNumberLongLngLngIDObjectObjObjStudentShortShrShrColSingSngSngAreaStringStrStrName<四>常量在代碼里,有時我們要反復(fù)使一個相同的常數(shù)值(如:Pi=3.1415926),這時我們可以先定義一個常量然后給它賦值,之后就調(diào)用這個常量就可以了。1、常量聲明格式:Const數(shù)量名稱As數(shù)據(jù)類型=數(shù)值如:ConstPiAsDouble=3.1415926和變量一樣,Const語句聲明也有其作用范圍,跟變量一樣使用相同的規(guī)則。2、常量分類常量有兩種:一各是系統(tǒng)內(nèi)部定義的常量;另一種是符號的或用戶定義的常量。五、運算符與表達式<一>算術(shù)運算符運算符功能優(yōu)先級^指數(shù)1-取負2*乘3/除(可以保留小數(shù))\整除4Mod求余數(shù)5+加6-減<二>連接運算符運算符名稱說明+加連接符如果兩個操作數(shù)為“String”,就把兩個操作數(shù)連接成一個字符串。否則按加號處理。&連接符將操作數(shù)強行轉(zhuǎn)換成“String”,再進行連接運算。注意連接符“&”、“+”的區(qū)別:“+”連接符兩邊的操作數(shù)應(yīng)均為字符串;若一邊是數(shù)字型數(shù)據(jù),則“+”運算符將另一邊的字符串(該字符串必須是數(shù)字字符串,否則出錯)強制轉(zhuǎn)換成數(shù)字類型,然后進行自述加法運算?!?”在VB.NET中該運算符專門用于字符串連接,因此它會把其他的數(shù)據(jù)類型轉(zhuǎn)換成字符串,再進行字符串的連接。例如:”abc”+520

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論