vbnet語法基礎(chǔ)_第1頁
vbnet語法基礎(chǔ)_第2頁
vbnet語法基礎(chǔ)_第3頁
vbnet語法基礎(chǔ)_第4頁
vbnet語法基礎(chǔ)_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第2章 VB.NET語法基礎(chǔ)在進行ASP.NET程序設(shè)計之前,首先要選擇一種ASP.NET編程語言。ASP.NET的默認(rèn)語言是Visual Basic.NET,當(dāng)然也可以使用C#。本書主要介紹Visual Basic.NET,并且書中所有的例子都用Visual Basic.NET來編寫。本章介紹一些Visual Basic.NET的初步知識,關(guān)于VB.NET的高級編程知識請讀者參閱其他相關(guān)圖書。Visual Basic.NET是繼Visual Basic 6.0之后新發(fā)布的Visual Basic的全新版本。如果您是一個Visual Basic.NET的高手的話,可以跳過這一部分,從第3章開始

2、學(xué)習(xí)。學(xué)完本章后,讀者將能夠:(1) 了解為什么選擇VB.NET作為ASP.NET程序設(shè)計的首選語言;(2) 了解變量、常量和表達式的知識;(3) 會使用條件、循環(huán)語句;(4) 了解如何使用過程和函數(shù)。2.1 編程語言的選擇由于ASP.NET只是一個程序設(shè)計環(huán)境,要在這個環(huán)境中進行程序設(shè)計,必須選擇一種語言。在早期的ASP中,默認(rèn)使用的語言是VBScript腳本語言。由于.NET Framework已經(jīng)支持VB等非腳本的高級語言,所以完全沒有必要再去使用VBScript,但是原來用VBScript寫的程序在ASP.NET中仍然可以執(zhí)行,因為.NET環(huán)境仍然支持VBScript的語法。2.1.1

3、 .NET支持的語言.NET為用戶提供了三種程序設(shè)計語言:Visual Basic.NET、C#和Jscript。本節(jié)分別介紹這三種語言。Visual Basic.NET是VB最新的版本,從功能和性能上講可以說有了很大的飛躍。首先,早期的VB版本不完全支持面向?qū)ο蟮某绦蛟O(shè)計,由于它不支持對象的繼承和重載,所以產(chǎn)生了很多問題。另外,早期的VB版本無法創(chuàng)建多線程的應(yīng)用程序,這樣就不能夠充分利用機器的資源,也不能很好地提高應(yīng)用程序的執(zhí)行效率。但是現(xiàn)在,由于VB.NET使用了CLR,這些問題都很好地得到了解決。對于C#,可以認(rèn)為它是在C、C+的基礎(chǔ)上創(chuàng)立的一種新的語言。它繼承了C+的優(yōu)異功能,去除了在

4、.NET環(huán)境中沒有用處的類型定義、模板等功能,使得C#與C+相比,更加易于使用,同時效率也大大提高。與VB.NET一樣,JScript.NET也是從JScript發(fā)展而來的。JScript.NET是完全用C#重新編寫的,它支持類型和繼承性,并且是完全編譯執(zhí)行的。為了保證原有的JScript程序仍然能夠正確地執(zhí)行,它仍然支持現(xiàn)有的JScript代碼。2.1.2 為什么選擇VB.NET本書選擇VB.NET作為程序設(shè)計語言的原因是:首先,VB.NET是ASP.NET的默認(rèn)編程語言;其次,VB.NET對于初學(xué)者來說十分簡單易學(xué),并且使用它可以完成C#和JScript.NET所能夠完成的所有功能。2.2

5、 變量、常量和表達式2.2.1 數(shù)據(jù)類型VB.NET中有12種不同的數(shù)據(jù)類型,可以分成三類:數(shù)值類型、文本類型和混合類型。數(shù)值類型是VB.NET數(shù)據(jù)類型的主要類型,共7種。數(shù)值類型的數(shù)據(jù)類型見表2-1。表2-1 數(shù)值類型的數(shù)據(jù)類型數(shù)據(jù)類型表示方式取 值 范 圍說 明整型Integer21474836482147483647用于表示簡單整數(shù)字節(jié)型Byte0255用于簡單算術(shù)運算。由于這個類型的變量可以在一個字節(jié)中存儲,所以運算速度最快短整型Short3276832767是整型的一種形式,相對表示范圍較小長整型Long92233720368547758089223372036854775807是整

6、型的一種形式,相對表示范圍較大單精度型Single3.402823E381.401298E-45(對于負(fù)數(shù))和1.401298E-453.402823E38(對于正數(shù))用于存放單精度浮點數(shù)雙精度型Double1.79869313486232E3084.94065645841247E-324(對于負(fù)數(shù))和4.94065645841247E-3241.79869313486232E308(對于正數(shù))用于存放雙精度浮點數(shù)小數(shù)Decimal當(dāng)小數(shù)位為0的時候,為當(dāng)小數(shù)位為28的時候,為常用于存儲貨幣值用于存放文本的數(shù)據(jù)類型有兩個。文本類型的數(shù)據(jù)類型見表2-2。表2-2 文本類型的數(shù)據(jù)類型數(shù) 據(jù) 類 型

7、表 示 方 式說 明字符串型String用于存放任何形式的字符串,包括一個字符或者多行字符字符型Char用于存放一個字符,它以065535之間數(shù)字的形式存儲其中需要說明的是:(1) 對于String類型,可以存放任何形式的字符串,它可以是純粹的文本,也可以是文本和數(shù)字的組合或者是數(shù)字、日期等。例如"This is a book. "和"12345"都是字符串。對于字符串類型的數(shù)據(jù),可以進行相關(guān)的字符串操作,例如連接、截斷等。(2) 對于Char類型,可以存儲的只是一個字符,注意,這個字符的存儲編碼必需是一個數(shù)字。在計算機系統(tǒng)中,可以顯示很多符號(不僅僅是

8、英文字母),為了能夠正確地顯示,國際上有通用的標(biāo)準(zhǔn)(例如Unicode編碼),為每個字符設(shè)定了一個標(biāo)準(zhǔn)的數(shù)值來表示這個字符。其余的數(shù)據(jù)類型還有:Date數(shù)據(jù)類型、布爾數(shù)據(jù)類型和Object數(shù)據(jù)類型,其說明見表2-3。表2-3 其他數(shù)據(jù)類型數(shù) 據(jù) 類 型表 示 方 式說 明日期型Date必須用mm/dd/yyyy的格式表示,也可以存儲時間(可以存儲00:00:0023:59:59之間的任何時間)布爾型Boolean取值為True和False對象型Object其中需要說明的是:在VB.NET中,對于Boolean類型的數(shù)據(jù),當(dāng)需要把布爾類型的值轉(zhuǎn)換為數(shù)值類型的時候,會把True當(dāng)成1來處理,把Fa

9、lse當(dāng)作0來處理。當(dāng)需要把數(shù)值類型的值轉(zhuǎn)換為布爾類型的時候,會把0轉(zhuǎn)換為False,而把其他的非0數(shù)值轉(zhuǎn)換為True。2.2.2 變量變量用來存儲程序中需要處理的數(shù)據(jù),用戶可以把變量看作是在內(nèi)存中存儲數(shù)據(jù)的盒子。在其他程序設(shè)計語言中,幾乎都要求程序設(shè)計人員在使用變量之前定義變量的數(shù)據(jù)類型,因為不同數(shù)據(jù)類型的變量所需要的內(nèi)存空間是不一樣的:比如,字節(jié)型變量需要8位的空間,短整型變量需要16位空間等,這就表示盒子的容量是不一樣的,所以為一種數(shù)據(jù)類型定義的變量就不能存放另一種數(shù)據(jù)類型的值。在Visual Basic.NET中,創(chuàng)建變量的方式有兩種:一種方法是使用Dim關(guān)鍵字,這是顯式定義的方法。還

10、可以使用隱式定義的方法,也就是在用戶需要使用一個變量的時候直接寫出這個變量并為它賦值。顯式定義方法如下所示:Dim x通過這樣一條語句,就創(chuàng)建了一個名為x的變量。也可以用下面的方法一次定義多個變量:Dim a,x這條語句創(chuàng)建了兩個變量:a和x。在這里,有以下幾點需要說明:(1) 如何為變量取名字。Visual Basic.NET和其他語言一樣,其變量名稱必須以字母開頭,只能包含字母、數(shù)字和下劃線,并且不是Visual Basic.NET關(guān)鍵字。在為變量取名時,建議不要使用像a或者x這樣的讓人無法理解的變量名,而應(yīng)該采用小寫前綴加上有特定描述意義的名字的方式來為變量命名,這種命名方法被稱為Hun

11、garian法。變量名的前三個字母用于說明數(shù)據(jù)類型,第四個字母大寫以表示變量的實際含義。例如下面的定義:Dim strFileNameDim intTotal都可以說是定義了很好的變量名:用str和FileName兩個部分組合來表示strFileName是用來存儲字符串類型的文件名的,用int和Total兩個部分組合來表示intTotal是用來存儲整數(shù)類型的總和的。當(dāng)然,對于程序員來說,這種命名約定并不是強制性的,仍然可以使用a和x這樣的變量名,也可以用intTotal變量來存儲一個字符串。但是很明顯,如果用戶都采用這種為變量命名的方式并在程序設(shè)計過程中遵循這樣的好習(xí)慣,可以讓程序易讀,并減少

12、出錯的機會。在VB.NET中,常用的約定前綴見表2-4。表2-4 常用的變量命名約定數(shù) 據(jù) 類 型前 綴例 子BooleanblnblnYesBytebytbytByteCharchrchrCharDatedatdatDateDoubledbldblDoubleDecimaldecdecDecimalIntegerintintTotalLonglnglngLongSinglesngsngSingleShortshoshoShortStringstrstrTextObjectobjobjFileObject(2) 當(dāng)使用Dim 語句的時候,可以在后面加上一個as關(guān)鍵字來指定一個變量的數(shù)據(jù)類型。例

13、如:Dim intTatal as Integer這條語句表示創(chuàng)建一個名為intTatal的整數(shù)類型的變量,使用這種方法可以指明一個變量必須要保存什么類型的數(shù)據(jù)。雖然VB.NET并不強迫用戶在定義變量的時候一定要指明其數(shù)據(jù)類型,但是建議用戶在編寫程序時使用這種方法來指明變量的數(shù)據(jù)類型,以減少程序出錯的可能。(3) 雖然可以使用隱式方法來創(chuàng)建變量,但是由于前面提到的原因,仍然建議使用顯式的方法來定義變量。(4) 在VB.NET中,是不區(qū)分大小寫的,這就意味著,變量strFileName和變量strfilename將表示同一個變量。2.2.3 運算符在VB.NET中常用的運算符與其他的語言并沒有什

14、么不同。常用的運算符有:賦值運算符、算術(shù)運算符、字符串連接運算符、比較運算符和邏輯運算符。1. 賦值運算符賦值運算符是最常用的運算符,它就是我們熟悉的等號(=)。需要注意的是,雖然它表面上是一個等號,但它并不是一個數(shù)學(xué)意義上的等號,它的意思是把等號后邊的值賦值給等號前面的變量。例如,如果定義了一個整數(shù)型變量intNumber,就可以使用下面的語句:Dim intNumber as IntegerintNumber=1intNumber=intNumber*3其中,第一行表示創(chuàng)建了一個名字為intNumber的整數(shù)型變量,第二行表示把這個變量的值賦值為2,第三行表示把intNumber中的值(也

15、就是2)乘以3所得到的值(也就是6)賦值給intNumber。當(dāng)?shù)谌龡l語句執(zhí)行完成之后,intNumber中的值就是6。而在數(shù)學(xué)上,當(dāng)intNumber的值是非零的時候,intNumber無論如何也不可能等于intNumber*3。2. 算術(shù)運算符VB.NET中的算術(shù)運算符有:+(加)、(減)、*(乘)、/(除)、(整數(shù)除)、Mod(取模)和(冪),其中需要解釋的是/(除)和(整數(shù)除)的區(qū)別。/(除)表示的是通常意義的除法,例如,(5.4/3)的結(jié)果是1.8,而(整數(shù)除)表示把除數(shù)和被除數(shù)四舍五入以后再計算除法得到的整數(shù)結(jié)果,所以在計算(5.43)時,把5.4四舍五入為5,再進行運算,得到的整

16、數(shù)結(jié)果是1,這種運算在特定的應(yīng)用中會十分有用。例如,你有89條消息需要發(fā)布,又不希望所有的89條信息都在一頁中顯示,而希望分頁顯示,而每頁中只顯示20條信息。那么(8920)所得到的4就表示有4頁是填滿了20條信息的,而剩下的一頁中有19條信息,并沒有填滿。例2.1(02-01.aspx)VB.NET中算術(shù)運算符的用法。1:<%2:Dim dblData1,intData2,intData33:dblData1=5.44:intData2=35:intData3=76:Response.Write (dblData1+intData2 & "<br>&quo

17、t;)'5.4+3:結(jié)果是8.47:Response.Write (dblData1-intData2 & "<br>")'5.4-3:結(jié)果是2.48:Response.Write (dblData1*intData2 & "<br>")'5.4*3:結(jié)果是16.29:Response.Write (dblData1/intData2 & "<br>")'5.4/3:結(jié)果是1.810:Response.Write (dblData1intDat

18、a2 & "<br>")'5.43:結(jié)果是111:Response.Write (intData3 Mod intData2 & "<br>")'7 Mod 3:結(jié)果是112:Response.Write (intData3 intData2 & "<br>")'7 3:結(jié)果是34313:%>需要說明的是:上面程序中第6行到第11行語句中的“&”運算符表示字符串的連接,另外,Response.Write表示輸出后面括號中的字符串。可以運行

19、上面的程序來學(xué)習(xí)如何使用算術(shù)運算符。3. 字符串連接運算符在例2.1中可以使用第6行的dblData1+intData2得到一個Double類型的數(shù)和一個Integer類型的數(shù)進行相加的結(jié)果。對于兩個字符串類型的變量,也可以使用“+”運算符。但是這時“+”運算符的含義不是加法,而是字符串的連接。例如:Dim strTemp1,strTemp2 as StringstrTemp1="Hello"strTemp2="World. "response.wirte(strTemp1 + " " + strTemp2)當(dāng)定義了兩個字符串型變量s

20、trTemp1和strTemp2并給它們分別賦值之后,就可以使用第4行的“+”運算符把它們連接起來,并在中間夾了一個空格,形成"Hello World."字符串。由于在算術(shù)運算符中“+”的含義與字符串運算的時候“+”的含義大不相同,所以為了減少誤會的發(fā)生,在VB.NET中還可以使用“&”運算符作為字符串連接運算符。也就是說,當(dāng)把第4行的語句換成response.wirte(strTemp1 & " " & strTemp2)后,仍然會得到正確的結(jié)果。建議使用“&”運算符進行字符串連接。4. 比較運算符VB.NET中的比較運

21、算符有:=(等于)、<>(不等于)、<(小于)、<=(小于等于)、>(大于)、>=(大于等于)。這些運算符對于數(shù)值、字符、日期表達式的比較都是有效的,結(jié)果是布爾類型的True或False。例2.2(02-02.aspx)VB.NET中的比較運算符的用法。1:<%2:Dim dblData1,intData2,intData33:dblData1=5.44:intData2=35:intData3=76:Response.Write (dblData1>intData2) & "<br>")'5.4&

22、gt;3:結(jié)果是True7:Response.Write (dblData1<intData2) & "<br>")'5.4<3:結(jié)果是False8:Response.Write (dblData1=intData2) & "<br>")'5.4=3:結(jié)果是False9:Response.Write (dblData1>=intData2) & "<br>")'5.4>=3:結(jié)果是True10:Response.Write (d

23、blData1<=intData2) & "<br>")'5.4<=3:結(jié)果是False11:%>可以運行上面的程序來學(xué)習(xí)如何使用比較運算符。另外需要說明的是,字符串之間也是可以進行比較的,比較的方法是根據(jù)字母表的順序。例如,“but”比“book”大,而“A”小于“a”。5. 邏輯運算符VB.NET中常用的邏輯運算符有:Not(非)、And(與)、Or(或)、Xor(異或)。計算的結(jié)果仍然是布爾類型的True或False。例2.3(02-03.aspx)VB.NET中邏輯運算符的用法。1:<%2:Dim bolData1

24、,bolData2 as Boolean3:bolData1=True4:bolData2=False5:Response.Write (bolData1 And bolData2) & "<br>")'True And False是False6:Response.Write (Not bolData1) & "<br>")'Not True是False7:Response.Write (bolData1 Or bolData2) & "<br>")'

25、True Or False是True8:Response.Write (bolData1 Xor bolData2) & "<br>")'True Xor False是True9:%>可以運行上面的程序來學(xué)習(xí)如何使用邏輯運算符。2.2.4 常量常量是指在程序中直接給出的數(shù)值、字符或字符串。在程序中經(jīng)常會使用這樣的賦值語句:intValue=3strFileName="student.aspx"在這里,3和"student.aspx"是常量。在Visual Basic.NET中,有幾個很特別的常量用戶應(yīng)

26、該注意:(1) Nothing:在VB.NET中,把一個表示對象的變量賦值為Nothing時,就表示這個對象不再使用,VB.NET會釋放這個對象所占用的內(nèi)存空間。使用的方法是:objMyObject=Nothing(2) Null:當(dāng)一個變量的值是Null時,它表示這個變量的值不是有效數(shù)據(jù)。如果把變量形容成一個盒子,在沒有給一個變量賦任何值的時候,VB.NET 會給它一個初始值(例如,如果用戶定義了一個整型的變量,那么在沒有使用它之前,它的值是0);而Null則表示這個盒子中的值是一個無效值。(3) True:表示真。(4) False:表示假。True和False通常用于條件語句。另外一種常

27、量是用Const關(guān)鍵字定義的。在定義變量的時候使用Const而不是Dim,并為這個變量賦一個值,就可以定義一個特殊的常量。這個常量以變量的形式出現(xiàn)在程序中,只是它的值在程序的執(zhí)行過程中是不能改變的。由于它是一個不能改變的變量,所以有人也稱它為常變量,也有人稱之為符號常量??梢圆捎孟旅娴姆绞蕉x一個表示路徑名的符號常量:Const strPathName="c:windows"這樣,在后面的程序中,就可以使用strPathName來代表所有的“c:windows”路徑名,不用每次都指明。而且,如果程序發(fā)生變化,路徑名要變成“c:windowscindy”,只要改動上面的這個定

28、義語句就可以了。如果不采用常量,就需要修改程序中所有涉及到這個路徑名的地方。為了提高程序的效率,建議用戶不要定義不需要使用的常量,因為所有的常量都要占用內(nèi)存空間來進行保存。一旦定義了一個常量,系統(tǒng)就要在它的整個生存期內(nèi)負(fù)責(zé)維護這個常量。對于大型的程序,往往會定義一個常量文件,把所有項目中會使用的常量都定義在這個文件中,在需要使用的時候把這個文件包含進來。這種方法雖然對于減少代碼的復(fù)雜度很好,但是有一個問題,就是一個程序并不會使用包含文件中的所有常量。這樣,很多常量是沒有用的,但是這些常量卻仍然要占用服務(wù)器的內(nèi)存空間。由于在網(wǎng)絡(luò)的環(huán)境中,客戶的需求不好估計,往往很大,所以在定義常量時,要考慮清楚

29、,才能保證程序的效率。2.2.5 數(shù)組除了使用單個變量,在VB.NET中還可以使用數(shù)組,以方便地存儲一系列相關(guān)的數(shù)據(jù)。數(shù)組分為一維數(shù)組和多維數(shù)組。一維數(shù)組如下定義:Dim arrData(2) as String這個Dim語句定義了一個長度為3的一維數(shù)組arrData。它的下標(biāo)的范圍從02,即可以訪問arrData(0)、arrData(1)、arrData(2),而數(shù)組中所有的數(shù)據(jù)都是String類型。多維數(shù)組就是維數(shù)大于1的數(shù)組。最常見的是二維數(shù)組和三維數(shù)組。二維數(shù)組的定義方式如下:Dim arrData(2,3) as String這個Dim語句定義了一個3×4的數(shù)組,共有12

30、個單元。與一維數(shù)組一樣,它的下標(biāo)范圍是第一維從02,第二維從03。以此類推,可以定義三維數(shù)組或維數(shù)更多的數(shù)組。在VB.NET中數(shù)組的維數(shù)最多可以定義到60,但很少有人會用到維數(shù)超過三維的數(shù)組。在VB.NET中還可以定義動態(tài)數(shù)組,即長度不確定的數(shù)組。例如,可以在程序開始的時候定義一個動態(tài)數(shù)組:Dim arrData()在這里,沒有指明數(shù)組arrData的長度,也不知道它的維數(shù),因此這個數(shù)組在程序中是不能直接使用的。因為所有的數(shù)組都需要有連續(xù)的內(nèi)存空間來存放,如果沒有定義數(shù)組的維數(shù)和每一維的長度,就意味著無法為數(shù)組分配內(nèi)存空間。所以VB.NET要求在使用動態(tài)數(shù)組之前用ReDim語句為這個數(shù)組指明維

31、數(shù)和每一維的長度。方法如下:ReDim arrData(2)這個時候,才可以使用arrData數(shù)組。注意,如果一個數(shù)組在定義的時候不是動態(tài)數(shù)組,就不能使用ReDim語句對數(shù)組重新定義。另外,對于已經(jīng)使用ReDim重定義過的動態(tài)數(shù)組,可以使用ReDim重新再定義這個數(shù)組的長度,但是不能使用ReDim來重新定義數(shù)組的維數(shù)。也就是說,如果已經(jīng)定義了一個動態(tài)數(shù)組arrData(),可以在后面的程序中把它重新定義為一個一維的數(shù)組(如ReDim arrData(2),而不允許再把它定義為一個二維的數(shù)組(如ReDim arrData(2,3),但是可以把它再次重定義為一個長度為5的一維數(shù)組(ReDim ar

32、rData(4)。2.2.6 表達式表達式是一個或多個運算的組合。VB.NET的表達式與其他語言的表達式?jīng)]有顯著的區(qū)別。每個符合VB.NET規(guī)則的表達式的計算都是一個確定的值。對于常量、變量的運算和對于函數(shù)的調(diào)用都可以構(gòu)成最簡單的表達式。2.3 分支到目前為止,我們已經(jīng)學(xué)習(xí)了VB.NET的表達式的使用。現(xiàn)在,我們把它們用到更加復(fù)雜的結(jié)構(gòu)中去。在程序設(shè)計中,條件語句能夠根據(jù)表達式的值來決定代碼的執(zhí)行流程。在VB.NET中,條件分支語句有兩種:If/Then/Else語句和Select/Case語句。1. If/Then/Else語句If/Then/Else語句是最常用的條件語句。它的基本形式是:

33、If condition Then statements1 Else statements2 它表示:如果condition為True,那么就執(zhí)行statements1;否則執(zhí)行statements2。例2.4(02-04.aspx)根據(jù)時間顯示問候信息。1: <%2:If Hour(Now)<12 Then Response.Write ("Good morning! Cindy!")3:If Hour(Now)=12 Then Response.Write ("Good noon! Cindy!")4:If (Hour(Now)>1

34、2 And Hour(Now)<18) Then Response.Write ("Good afternoon! Cindy!")5:If Hour(Now)>=18 Then Response.Write ("Good evening! Cindy!")6: %>在上面的例子中,函數(shù)Hour()是對給出的日期時間求它的小時數(shù),Now函數(shù)用于返回當(dāng)前的日期和時間。程序根據(jù)當(dāng)時的時間判定是上午、中午還是下午,分別給出問候信息。我們看到,這個寫法很簡單,但是這個程序為了顯示一條問候信息,要對Hour(Now)取值4次并且執(zhí)行4次比較才能完

35、成,從效率上考慮并不好。If/Then/Else語句還可以寫成比較復(fù)雜的形式:If condition_1 Thenstatements_1ElseIf condition_m Thenstatements_mElseIf condition_n ThenElsestatements_2End If這個語句可以檢測多個條件。第一種寫法要求語句在寫的時候要在一行中寫完,例如例2.4 的第2行的If語句。這條語句也可以采用第二種方法來寫,方法如下:If Hour(Now)<12 ThenResponse.Write ("Good Morning!Cindy!")End I

36、f建議用戶采用后一種寫法,因為這種方法更結(jié)構(gòu)化,可讀性好。當(dāng)用戶在調(diào)試大型軟件的代碼時,會發(fā)現(xiàn),雖然看起來多寫了幾行語句,但好處卻是很大的。例2.5(02-05.aspx)根據(jù)時間顯示問候信息。請注意這個例子的寫法與上個例子中的寫法在執(zhí)行效率上的區(qū)別。1:<%2:If Hour(Now)<12 Then3:Response.Write ("Good morning! Cindy!")4:ElseIf Hour(Now)=12 Then5:Response.Write ("Good noon! Cindy!")6:ElseIf Hour(Now

37、)>=18 Then7:Response.Write ("Good evening! Cindy!")8:Else9:Response.Write ("Good afternoon! Cindy!")10:End If11:%>上面的例子在執(zhí)行的過程中,對于當(dāng)前不同的時間,為了顯示問候信息,執(zhí)行的Hour(Now)的取值和比較的次數(shù)是不一樣的:最少只要1次,最多需要3次。從效率上看,比例2.4要好。2. Select/Case結(jié)構(gòu)當(dāng)程序中的條件比較復(fù)雜,而且是根據(jù)同一個表達式的不同值執(zhí)行不同操作的時候,用If/Then/Else語句來寫就顯得

38、十分煩瑣。這時可以考慮采用Select/Case結(jié)構(gòu)來完成條件語句。Select/Case結(jié)構(gòu)為:Select Case testexpressionCase condition_1statements_1Case Else statements_nEnd Select它表示:如果testexpression的值是Condition_1,就執(zhí)行statements_1,以此類推,如果都不符合,就執(zhí)行Statements_n。例2.6(02-06.aspx)用Select/Case語句來實現(xiàn)問候信息的顯示。1:<%2:Select Case Hour(Now)3:Case 0,1,2,3,

39、4,5,6,7,8,9,10,114:Response.Write ("Good morning! Cindy!")5:Case 126:Response.Write ("Good noon! Cindy!")7:Case 13,14,15,16,178:Response.Write ("Good afternoon! Cindy!")9:Case Else10:Response.Write ("Good evening! Cindy!")11:End Select12:%>很明顯,用這種方法來顯示問候信息要

40、比用If/Then/Else語句清楚得多。因此,在選擇條件語句的時候要考慮好采用什么方式,并認(rèn)真設(shè)置好條件。2.4 循環(huán)VB.NET中的循環(huán)有三種形式:For/Next、While/End While、Do/Loop和For/Each。1. For/Next循環(huán)用For/Next循環(huán)可以精確地控制循環(huán)體的執(zhí)行次數(shù)。For/Next循環(huán)的語法如下: For counter = startvalue To endvalue Step stepvaluestatementsExit ForstatementsNext其中,用Step關(guān)鍵字可以定義循環(huán)計數(shù)器的增長方式,stepvalue的值(可正可負(fù)

41、)來適應(yīng)各種不同的需求。Exit For語句允許在某種條件下直接退出循環(huán)體。例2.7(02-07.aspx)用For/Next語句來實現(xiàn)顯示二維數(shù)組的內(nèi)容。1:<%2:Dim arrData(1,2)3:Dim intI,intJ as Integer4:arrData(0,0)=125:arrData(0,1) =136:arrData(0,2) =147:arrData(1,0) =158:arrData(1,1) =169:arrData(1,2) =1710:For intI=0 To 111:For intJ=0 To 212:Response.Write (arrData(i

42、ntI,intJ) & " ")13:Next14:Response.Write ("<br>")'一行顯示完以后換行顯示下一行15:Next16:%>可以看出,用For/Next循環(huán)來顯示數(shù)組這樣的可以確定循環(huán)次數(shù)的數(shù)據(jù)結(jié)構(gòu)是十分方便的。2. While/End While 循環(huán)如果不清楚要執(zhí)行的循環(huán)的次數(shù),那么可以用While/ End While循環(huán)。它有一個檢測條件,當(dāng)條件滿足時,執(zhí)行循環(huán)體的內(nèi)容。如果條件不滿足,就退出循環(huán)。While/ End While語法如下:While condition stateme

43、ntsEnd While由于在進入循環(huán)體之前會遇到檢測條件,所以如果這個時候condition的值為False,那么While/ End While循環(huán)的循環(huán)體有可能一次也不能執(zhí)行。例2.8(02-08.aspx)顯示3次問候信息。1:<%2:Dim intI as Integer3:IntI=04:While intI<35:Response.Write ("Hello! Cindy!" & "<br>")6:IntI=intI+17:End While8:%>在這個例子的第3行中為第2行中定義的intI變量設(shè)置了

44、初值0。這里,如果不設(shè)置初值也是可以的,系統(tǒng)會自動為intI進行初始化(VB.NET默認(rèn)為未顯式初始化的整數(shù)初始化為0)。但是,建議養(yǎng)成為變量設(shè)置初值的好習(xí)慣,這樣可以防止很多意想不到的錯誤。3. Do/Loop同樣,在不知道循環(huán)次數(shù)的情況下,也可以使用Do/Loop 循環(huán)。Do/Loop循環(huán)的作用與While/ End While十分相似。它的語法是:Do While | Until condition statements Exit Do statementsLoop其中,Do后面的While和Until是可選的。使用While時,后面的條件滿足則執(zhí)行循環(huán)體;使用Until時,后面的條件滿

45、足就退出循環(huán)體。Do/Loop循環(huán)還有另外一種寫法:Do statements Exit Do statementsLoop While | Until condition這種寫法的結(jié)果是:循環(huán)體在執(zhí)行的時候至少會執(zhí)行一次。例2.9(02-09.aspx)顯示3次問候信息。1:<%2:Dim intI3:IntI=04:Do Until intI>25:Response.Write ("Hello! Cindy!" & "<br>")6:IntI=intI+17:Loop8:%>可以看出,Do/Loop的執(zhí)行和Whi

46、le/End While的執(zhí)行沒有太大的區(qū)別。用戶也可以把上面例子中第4行中的Until改為While并相應(yīng)地改變后面的條件來實現(xiàn)相同的功能。4. For/Each在某些特殊情況下,可以使用For/Each來實現(xiàn)對一個數(shù)組或集合(集合將在后面的章節(jié)中講解)中元素的遍歷。For/Each語句的寫法如下:For Each item In Array or CollectionstatementsNext例2.10(02-10.aspx)用For/Each顯示一個數(shù)組中的所有數(shù)據(jù)。1:<%2:Dim arrData(3)3:Dim stritem as string4:arrData(0)=&

47、quot;Beijing"5:arrData(1)="Shanghai"6:arrData(2)="Guangzhou"7:For Each stritem In arrData8:Response.Write (stritem & "<br>")9:Next10:%>可以看出,F(xiàn)or/Each循環(huán)與For/Next循環(huán)的區(qū)別是:在For/Next循環(huán)中需要指明循環(huán)的次數(shù),而在For/Each循環(huán)中不需要這樣就可以遍歷到一個數(shù)組或集合的所有內(nèi)容。另外需要說明的是,這種循環(huán)通常在集合中使用。2.5 過

48、程和函數(shù)在程序設(shè)計過程中,隨著代碼量的不斷增加,會出現(xiàn)很多地方使用同樣代碼的情況。為了能夠減少同樣代碼的編寫,ASP.NET允許使用一些小的程序?qū)⒅貜?fù)的代碼只寫一次,其他需要使用這段代碼的地方調(diào)用這個小程序就可以了。在ASP.NET中,實現(xiàn)這種小程序的方式有兩種:過程和函數(shù)。2.5.1 模塊化的優(yōu)點模塊化是在程序設(shè)計發(fā)展到一定程度的時候誕生的程序設(shè)計方法。在早期的程序設(shè)計過程中,由于機器的硬件配置低,所以程序的運行速度和效率十分重要,因此早期的程序設(shè)計人員會大量使用各種技巧保證程序的快速運行,而這些技巧導(dǎo)致的最直接后果就是程序的結(jié)構(gòu)混亂,很難閱讀。隨著機器硬件的不斷更新,這些編程技巧所提高的程

49、序運行速度已經(jīng)微不足道,這時提高程序的可讀性就變得十分重要,于是就出現(xiàn)了模塊化程序設(shè)計方法。模塊化程序設(shè)計方法的特點是:在編寫程序之前,把程序的功能分解成若干個小的任務(wù),并把這些小任務(wù)看成是一個一個的模塊。當(dāng)各個模塊編寫完成之后,就可以把這些模塊編譯成為一個大型的程序。由于每個模塊都有自己獨立的功能,所以可以把這些模塊分配給很多程序員來完成;而每個模塊的功能都是詳細(xì)定義的,所以可以建立完善的文檔,使得程序的可讀性大大提高。2.5.2 過程和函數(shù)VB.NET支持子過程和函數(shù),它們都可以根據(jù)需要設(shè)置參數(shù)。它們之間惟一的區(qū)別是函數(shù)可以有返回值而子過程沒有。子過程的定義方式為:Sub subname

50、(argument1, argumentn)statementsEnd Sub對于子過程的調(diào)用方式是直接調(diào)用過程名subname。如果有參數(shù),就在后面按照次序?qū)?shù)在括號中寫好。例2.11(02-11.aspx)用一個子過程顯示對一個用戶的問候信息:1:<script language="vb" runat="server">2:Sub SayHello(strUserName as String)3:Response.Write ("Hello!" & strUserName & "<br

51、>")4:End Sub5:</script>6:<%7:SayHello("Cindy")8:%>在上面的例子中,有下面幾點需要說明:(1) 在第1行第5行使用<Script>標(biāo)記加入程序代碼。(2) 在第2行第4行定義了一個SayHello子過程。這個過程帶有一個參數(shù)strUserName,并在第3行輸出。(3) 在第7行調(diào)用了這個子過程。在調(diào)用的時候,傳入?yún)?shù)的值是“Cindy”。函數(shù)的定義方式為:Function functionname (argument1, argumentn)statementsReturn

52、 valuestatementsEnd Function對于函數(shù)的調(diào)用方式是調(diào)用函數(shù)名functionname()。如果有參數(shù),就按照次序?qū)懺诶ㄌ栔?。?.12(02-12.aspx)用一個函數(shù)計算兩個整數(shù)的和。1:<script language="vb" runat="server">2:Function Add(intData1 as Integer,intData2 as Integer) as Integer3:intData1=intData1+intData24:Return intData15:End Function6:&l

53、t;/script>7:<%8:Dim intTemp1,intTemp2 as Integer9:intTemp1=210:intTemp2=311:Response.Write(Add(intTemp1,intTemp2)12:Response.Write("<br>")13:Response.Write(intTemp1)14:%>在上面的程序中,有下面幾點需要說明:(1) 在第2行第5行定義了一個函數(shù)Add。這個函數(shù)帶有兩個參數(shù):intData1和intData2,并把一個整數(shù)作為返回值。(2) 在第3行把參數(shù)intData1與intD

54、ata2的和放到intData1中,并在第4行把intData1作為結(jié)果返回。(3) 在第11行調(diào)用了這個函數(shù),并把結(jié)果顯示出來。在上面的子過程和函數(shù)的講解過程中,可以看出都可以采用帶參數(shù)的方式來增加子過程和函數(shù)的靈活性。需要說明的是,參數(shù)的傳遞有兩種方式:通過值傳遞參數(shù)和通過引用傳遞參數(shù)。在調(diào)用子過程和函數(shù)的時候,如果沒有明確地指出,所有的參數(shù)都是通過值進行傳遞的。所謂通過值進行傳遞,就是把參數(shù)的值復(fù)制到參數(shù)中。例如例2.12中第11行的Add(intTemp1,intTemp2),就是通過值進行傳遞的好例子。在真正執(zhí)行第2行第5行定義的Add函數(shù)時,是把intTemp1的值2復(fù)制給了int

55、Data1,把intTemp2的值3復(fù)制給了intData2。在第3行把intData1和intData2的和賦值給intData1的時候,intData1的值變成了5,但是這個時候,intTemp1的值仍然是2,不是5(通過第13行的執(zhí)行可以看出來),這就是通過值傳遞參數(shù)。這時,intData1和intTemp1是兩個不同的變量,在內(nèi)存中占用不同的存儲空間。在函數(shù)和子過程中,使用關(guān)鍵字ByVal來顯式表示通過值傳遞參數(shù)。也就是說,如果要用顯式的方式進行定義,第2行的函數(shù)定義可以寫成:Function Add(ByVal intData1 as Integer, ByVal intData2

56、as Integer) as Integer默認(rèn)的情況是采用通過值傳遞參數(shù)。那么什么是通過引用傳遞參數(shù)呢?請先看下面的例子。例2.13(02-13.aspx)用一個函數(shù)計算兩個整數(shù)的和。1:<script language="vb" runat="server">2:Function Add(ByRef intData1 as Integer,ByRef intData2 as Integer) as Integer3:intData1=intData1+intData24:Return intData15:End Function6:</script>7:<%8:Dim intTemp1,intTemp2 as Integer9:intTemp1=210:intTemp2=311:Response.Write(Add(intTemp1,intTemp2)12:Response

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論