VB.net基礎知識


3.1 常量

3.1.1 什么是常量

         在編程中,常常可以遇到變量和常量。顧名思義,變量就是值可以改變的量,常量是其值不可改變的量。

         不可以改變的量有什么用呢?事實上,在實際編程中,常量用得很少。甚至可以用變量代替常量,當然這樣做的代價是降低了程序的性能。

         事實上,常量有很多用處。例如圓周率,如果每次需要用到的時候都把它輸入一遍,效率(這里指編程效率而非執行效率)是很低的。如果把圓周率定義為一個常量,那么每次需要用到的時候,只要輸入常量名就可以了。

 

3.1.2 關鍵字Const

         這里首先講解下什么是關鍵字。在任何一種編程語言中,都定義着那么一些關鍵字,這些關鍵字有特殊的含義,例如Function就是VB.net中的一個關鍵字(VB.net中不區分大小寫),其功能就是定義一個函數。你不能將關鍵字用於你的常量、變量或者是函數的名字。其中用於定義常量的關鍵字是Const,Const的用法是:

Const 常量名 As 常量類型=常量值

         值得一提的是,As也是關鍵字,它通常用於常量和變量的定義之后,用來指明所定義的類型。不過它不是必須的,省略As的情況將在后面討論。

         后面的常量值是必須的,一個常量的值必須在定義時指定,而變量的值就可以以后再指定。與此同時,指定了常量值之后,就不能再修改了。

         常量名不是亂取的,首先它不能是關鍵字(例如不能是Function,也不能是function)。然后,它可以由阿拉伯數字、大小寫字母、下划線組成,但是不可以以數字開頭。

         例如這個常量名是合法的:

Str123_

         而這個是不合法的:

0Str123_

         常量名還可以以下划線開頭:

_Str123

         上面講的是常量名命名規則,是硬性規定,除此之外,還有一些約定俗成的規則。例如常量名一般都用大寫等等,這些不是必須的,但是可以提高你代碼的可讀性。這里不作詳細介紹,因為相關的命名規則太多。

         常量名的命名規則就講述到這里,現在要講講常量類型了。

         常量類型其實和變量類型是一樣的,常量類型有很多,你還可以自己定義一個類型。但是我們必須先了解常用常量類型。

 

3.1.3 常用常量類型

         常用的常量類型有字符串、整數和浮點數,下面來一一介紹:

String:字符串,長度沒有限制。

Integer:整數,其取值范圍為-2147483648~2147483647。

Long:長整數,取值范圍比Integer廣,為-9223372036854775808~9223372036854775807。

Double:浮點數,其取值范圍為-1.79769313486232E+308~1.79769313486232E+308,能精確到小數點后15位。

         以上是常用的幾個數據類型,請讀者務必牢記。至於字符串String,我們在上一章的學習中就已經接觸過,知道String的值要用雙引號括起來。

 

3.1.4 常量的定義

         了解了幾個常用的數據類型之后,我們來學習常量的定義。常量的定義要用到上面講過的Const關鍵字,至於定義的格式也已經介紹過了:

Const 常量名 As 常量類型=常量值

         接下來我們就定義一個字符串常量,取名為HW,內容為“Hello World”。根據前面的知識,它的數據類型應該是String,而后面的常量值應該用英文雙引號括起來。所以完整的定義應該是:

Const HW As String = "Hello World"

         又或者,定義一個整數常量,表示一MB中的字節數:

Const MB As Integer = 1048576

         再來,定義一個浮點數常量,表示圓周率的前10位:

Const PI As Double = 3.1415926535

         舉了3個例子,相信讀者已經掌握了常量定義的規律了。

 

3.1.5 常量的使用

         定義了一個常量之后,當時是使用了。使用一個常量很簡單,只需要直接輸入這個常量的名稱就可以了。例如:

Const HW As String = "Hello World"
MsgBox(HW)

         上面的這兩行代碼中,第一行定義了一個常量HW,第二行調用庫函數MsgBox輸出了HW包含的內容。上面這兩句代碼等效於下面這一句:

MsgBox("Hello World")

         可見,常量的使用就是簡單的輸入常量的名字。通過上述例子,相信讀者已經掌握了常量的使用方法,那么常量的定義及使用的介紹就到這里。接下來讓我們開始學習變量。

 

3.2 變量

3.2.1 什么是變量

         上面已經說過,變量就是其值可以改變的量。程序中用得最多的就是變量,它可以用來記錄程序目前的執行狀況,裝載用戶輸入的數據等等。總之變量的用途很多,這里不一一介紹,等到實際編程中,讀者自然能體會到。

 

3.2.2 關鍵字Dim

         上一節中,我們介紹了定義常量的關鍵字Const,那么定義變量自然也有它的關鍵字,就是Dim了(事實上,定義變量還有很多方法,Dim只是用來定義局部變量,全局變量將在后面討論)。Dim的用法是:

Dim 變量名 As 變量類型

         Dim的用法和Const的用法幾乎是一樣的,不同點在於,Dim定義的變量可以不賦初始值。這就分兩種情況了,一種是有初始值的:

Dim 變量名 As 變量類型=變量初始值

         另一種是沒有初始值的,由於變量可以在任何時候賦值,所以沒有初始值是允許的。這種情況就是:

Dim 變量名 As 變量類型

變量名=變量值

         上面的第二句是變量賦值。

 

3.2.3 布爾類型

         之前介紹常量數據類型的時候,只說了整數(和長整數)、字符串和浮點數。這里引入一個新的常用類型布爾。布爾,即Boolean,在一些語言中將其縮寫為bool,甚至沒有布爾類型。其實布爾類型很簡單,就兩個取值:True和False,True表示真,False表示假。一般用來設置窗體及空間的可見性、可用性等,還可以用來作為函數的返回值表示執行的結果(一般用True表示成功,False表示失敗)。其實布爾值也就是一個整數,True為1,False為0。在一些語言中,甚至直接用整數變量代替布爾。

 

3.2.4 變量的定義

         上面已經講到,定義變量要用關鍵字Dim。通過上面常量定義的學習,相信讀者能看懂下面三句代碼:

Dim MyName As String
Dim MyAge As Integer
Dim Succeed As Boolean

         上面三行分別定義了一個字符串變量MyName、一個整數變量MyAge和一個布爾變量Succeed。

上面我們說過,在使用Dim定義局部變量的時候,有兩種做法。可以只定義而不賦值,或者在定義的同時賦值,例如:

Dim Succeed As Boolean = True

     這是在定義的同時賦值,還有另一種,不賦初值。

     為什么要單獨拿出來說呢?因為在不賦初值的時候,可以同時定義多個變量。例如:

Dim Str1, Str2 As String

         這樣寫等效於:

Dim Str1 As String
Dim Str2 As String

     也就是說,在不賦初值的時候,如果有多個相同類型的變量需要定義,則可以在同一行中定義。定義時,多個變量名之間用逗號隔開即可。常量不可以用這樣的方法定義,因為常量必須賦初值。

     可見變量的定義和常量的定義是差不多的,不同點在於在不賦初值的時候可以同時定義多個同樣類型的變量,相信讀者能理解,這里就不多作介紹了。

 

3.2.5 變量的使用

         變量的使用跟常量的使用一樣,都是直接輸入變量名。例如:

Dim MyName As String
MyName = "X.TK"
MsgBox(MyName)

         上面的第一句是變量的定義,第二句是變量的賦值,第三句把MyName用作MsgBox的參數。其中第二第三句都是變量的使用,可見和常量使用沒有太大區別。不過常量定義后不能賦值而變量可以,接下來詳細講述變量的賦值。

3.2.6 變量的賦值

         變量的賦值很簡單,就是用一個等號連接變量跟表達式。這里的等號並不是相等的意思,而是把右邊的值賦予左邊的意思。

         變量賦值的格式:

變量名=表達式

         之前的介紹中,筆者寫的是“變量名=變量值”。事實上,在變量的賦值上,右側可以是一個表達式。表達式是由運算符和操作數組成的,相當於一個算式。在下一節中,筆者將詳細講述運算符和表達式。

 

3.3 運算符和表達式

3.3.1 運算符

         VB.net中的運算符有五個,它們是加、減、乘、除、冪,符號分別是+、-、*、/、^。

         用法就很簡單了,至少前三個是沒問題的。除法的寫法是被除數在前,除數在后,冪的寫法是底數在前,指數在后,也都很簡單。至於運算順序,是按照數學上的,也就是冪的優先級最高,然后是乘除,然后是加減。當然你可以加上圓括號來改變運算順序,圓括號可以無限嵌套。

         另外需要補充一點,就是字符串之間也可以用加號連接。注意是字符串之間,如果把字符串和整數等其他類型用加號連接,執行時會發生錯誤。

         字符串用加號連接,相當於把它們連接起來,例如:

Dim Str As String
Str = "Hello" + "World"

         代碼執行后,Str的值為“HelloWorld”。

3.3.2 表達式

         表達式其實就是算式,不過它的操作對象並不止數字這么簡單,還包括任意一個變量或常量。

         下面是一個合法的表達式:

((+ 4) * 5 - 8 / 3) ^ 5

         相信大家都可以看懂,就不多說廢話了。然后是含變量的表達式,其實變量跟數都是一樣的寫法,例如下面的代碼也是合法的:

Dim xInt As Integer
xInt = 1 + 2 + 3 + 4 + 5
xInt = 1 + 2 + 3 + 4 + 5 + xInt

         上面的代碼中,第一行第一了一個名為xInt的整數變量。第二行代碼給xInt賦值,右側的表達式運算結果為15,xInt的值為15。第三行代碼中,xInt也作為表達式的一部分,第三行代碼執行時,先計算右邊的表達式,表達式的值為30,再賦予左邊的變量xInt。因此三句代碼執行完畢之后,xInt的值為30。

 

3.4 過程

3.4.1 什么是過程

         在上一章中,我們省略了對過程的詳細講述,現在是時候來學習過程了。

         過程是一段沒有返回值的代碼,也稱方法,用於實現某些特定功能,可以理解為子程序,它可以包含參數列表。由過程名、參數列表和代碼段組成。

 

3.4.2 關鍵字Sub

         在上一章的最后一個實例中,我們在雙擊Form1之后,看到了這樣的代碼:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

End Sub

         當時筆者只是說,程序會在展示窗子之前執行中間的代碼。但是實際上,這是一個用來處理窗體Load事件的過程。對於事件,現在還不需要了解,等到后面的章節會詳細介紹。之前說過,Function是函數,Sub是過程。事實上,Sub也是一個關鍵字,它用於定義一個過程。上面的代碼中還有一個關鍵字Private,Private的中文意思是“私有的”,它表示這個過程只能在Form1內部訪問。這涉及到過程的可見性級別,會在以后介紹,這里可以省略Private關鍵字。

         Sub的用法是:

Sub 過程名(參數1,參數2……)

代碼段

End Sub

         上面的格式用於定義一個過程,最后一句代碼中的End也是一個關鍵字。它的用法很多,其中一種就是在一個空格之后接另一個關鍵字,標記某段代碼的結束。上面的End Sub就是這種用法,Sub和End Sub組成一對,中間的就是實現功能的過程代碼。

 

3.4.3 過程的定義

         上面講到,過程的定義需要用Sub關鍵字。過程的參數列表不是必須的,但是后面的圓括號是必須的。

         因此,一個最簡單的函數定義如下:

Sub MyFirstSub()

End Sub

         這個函數是空的,但是一樣可以調用,只不過調用沒有任何的效果罷了(事實上,計算機內部還是會進行入棧出棧等一系列操作)。

         接下來我們給它加上一行代碼,用來輸出一串字符。整個過程的定義就變成了:

Sub MyFirstSub()
   
 MsgBox("This is my first sub.")
End Sub

         這樣,在調用這個過程的時候,就會彈出一個消息框了。

         但是這樣的過程還是不夠靈活,每次調用出來的消息框都是一樣的,要想改變內容,就要改變過程的定義。用什么方法解決呢?當然是參數了,參數就寫在過程名后面的圓括號里。

 

3.4.4 參數列表

         其實我們之前已經接觸過參數列表了,就是在庫函數MsgBox中,第一個參數就是消息框中間顯示的字符串,現在我們來學習自己定義參數列表。

         再次看這段代碼:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

End Sub

         我們說過,圓括號里面的就是參數列表:

ByVal sender As System.Object, ByVal e As System.EventArgs

         中間有一個逗號,顯然這是兩個參數,我們來看第一個參數:

ByVal sender As System.Object

         首先是第一個關鍵字ByVal,它表示參數是按值傳送的,在過程或函數中對它進行的修改並不會在過程或函數結束后產生影響。換句話說,參數前面有ByVal關鍵字的話,當這個參數是用變量進行傳送時,參數在過程或函數里面可以修改,但是並不影響這個變量本身的值。除了ByVal外,還有ByRef,將在下一小節詳細介紹它們的區別。

         上面的sender很明顯就是參數名了。然后是我們早就遇到過的As關鍵字,我們知道,它通常用於指定前面的操作對象的數據類型。這里的意思是,傳來的參數sender的數據類型必須是System.Object,這個類型我們還沒接觸過,先不管。

         一般來說,定義一個參數的格式:

ByVal 參數名 As 數據類型

         函數或過程的執行中,可以將參數當作變量來用,用法是直接輸入參數名。

         讓我們來寫一個用來彈出消息框的過程,首先需要一個參數,表示要輸出的內容:

ByVal msg As String

         整個過程的定義就是:

Sub MyFirstSub(ByVal msg As String)
   
 MsgBox(msg)
End Sub

         可見在過程中使用參數的方法就是直接輸入參數名。雖然上面這個過程並沒有什么意義,因為我們完全可以直接調用MsgBox函數。不過當代碼多起來的時候,過程就顯得相當重要了。

 

3.4.5 參數的傳遞方式

         上面說過,參數有兩種傳遞方式,一種是ByVal,一種是ByRef。前一種ByVal指參數按值傳遞,后一種ByRef指參數按地址傳遞。如果傳入的參數是簡單的一個值,那么兩者並沒有區別。但是如果傳入的是一個變量的話,后一種方式ByRef將會保存在函數或過程中對其作出的所有更改。

         也就是說,ByRef是把整個變量傳遞過去,而ByVal只是把變量的值提取出來,再進行傳遞。

         關於這兩者的區別,將在章末的實例中用實驗加以驗證。

 

3.4.6 過程的調用

         例如,一個過程定義如下:

Sub MyFirstSub(ByRef msg As String)
   
 MsgBox(msg)
End Sub

         對於它的調用,我們之前已經說過,直接輸入過程名,然后帶一對圓括號,如果有參數,就在圓括號里輸入要傳遞的參數。

         所以,調用上面的過程應該是這樣:

MyFirstSub("This is my first sub.")

         這是傳遞了一個值。又或者,可以傳遞一個變量:

Dim Str As String = "This is my first sub."
MyFirstSub(Str)

         這兩種調用的效果是一樣的。由於過程沒有返回值,沒有函數復雜,但是有了過程的基礎,相信學習函數是非常簡單的。

 

3.5 函數

3.5.1 什么是函數

         籠統地講,函數就是有返回值的過程。至於什么是返回值,我們已經講過,它相當於數學上函數的函數值。

 

3.5.2 關鍵字Function

         函數的定義要用到關鍵字Function,和過程的定義大同小異:

Function 函數名(參數1,參數2……) As 返回值數據類型

代碼段

End Function

         和過程相比,除了把Sub換成了Function之外,還多了一個As關鍵字,指的是返回值的數據類型。在執行功能的函數中,返回值往往是Boolean,用來指示執行是否成功。

 

3.5.3 關鍵字Return

         Return,顧名思義,就是返回,用在函數或者過程中。也許讀者有疑問,過程沒有返回值,為什么能用Return?事實上,Return並不僅僅用於返回一個值,它有兩個用法。

         第一個用法是直接打一個Return:

Return

         這種用法只能出現在過程中,一旦執行到這一句代碼,馬上退出過程,回到調用該過程的位置繼續執行。

         另一種用法是:

Return 返回值表達式

         這種用法用在Function中,程序遇到這一句代碼,也會退出函數。不過在退出之前,先計算右側的返回值表達式,把表達式的值作為返回值。然后退出函數,回到調用該函數的地方,給出返回值,繼續執行。

         函數中只能使用第二種,但是不用Return也是合法的,不過可能會造成程序異常。在編譯的時候會給出警告,但是依然可以通過編譯。

 

3.5.4 函數的定義

         上面提到定義函數用的是關鍵字Function,返回值用關鍵字Return。下面定義一個用於計算兩數之和的函數:

Function AddFun(ByVal a As Integer, ByVal b As Integer) As Integer
    Return a + b
End Function

         上面定義的這個函數有兩個參數,有了前面的知識,相信大家看懂這個是沒有問題的。下面來復習一下上面的內容,讓我們來定義一個函數,相當於數學中的f(x)=x^2+3x+5:

Function f(ByVal x As Integer) As Integer
    Return x ^ 2 + 3 * x + 5
End Function

         這很簡單,相信讀者都能做到,只是要注意3x中間要加一個星號,表示乘法。

 

3.5.5 函數的調用

         函數的調用和過程的調用是一致的,只不過因為返回值的原因,函數調用本身可以作為一個表達式。

         例如,有函數定義如下:

Function AddFun(ByVal a As Integer, ByVal b As Integer) As Integer
    Return a + b
End Function

         那么,以下代碼是合法的:

Dim ret As Integer
ret = AddFun(10, 2)

         上面這段代碼中,第一行定義了一個整數變量用來儲存函數的返回值。第二行調用了函數,在執行第二行代碼的時候,程序先到AddFun處執行代碼,得到返回值12,然后將12賦給ret變量。也就是說,AddFun(10,2)這個調用本身就是一個值。

         因此,下面的代碼也是可以的:

Dim ret As Integer
ret = AddFun(10, 2) + 5

         執行之后,ret的值為17。

         這一章一口氣講了常量、變量、表達式、過程和函數,知識量有點大,這是筆者盡量在避免的。不過知識總是要學的,有的教材在這一章就把后面的知識都講了,讀者往往要反復看好多遍才懂。不過筆者認為最好的學習狀態是在一頁一頁看得很順的時候,一旦返回前面去看,學習的熱情就很低了。因此對於事件、類等等更為復雜的知識,筆者選擇在后面的章節中講述。在下一章中,筆者將為讀者介紹幾種程序結構類型,它們是順序結構、選擇結構和循環結構。不過在本章的最后一節中,筆者將做一個實例,以鞏固本章的內容。

         對於本書的實例,如果有條件實際操作,讀者最好可以自己輸入代碼,自己調試程序。如果只看教程不實操的話,再好的教材也是沒用的。因為到后面的知識是越來越難,如果前面的基礎知識不鞏固,后面是很難看懂的。

         由於很多讀者喜歡一口氣看幾章的教程,再上機操作,筆者特意把學習的過程拉長,目的就是讓初學者更好地掌握知識。如果在書里遇到實在沒有辦法解決的問題,歡迎聯系筆者。

 

3.6 用實例鞏固知識

3.6.1 創建項目

         筆者在看書時,遇到類似這樣的實例,也喜歡只看書上的運行結果,看完就算了。事實上,上機操作和只是看看書的差別很大。也是因為這樣,筆者看了很多書都沒有學會一門語言,望各位讀者引以為戒。

         啟動Visual Studio,新建一個Windows窗體應用程序(Visual Sutdio 2005中為“Windows 應用程序”),命名為“App03”。

         往窗體上添加三個Button控件,自動命名為Button1、Button2、Button3。

 

3.6.2 為程序添加代碼

         雙擊Button1,來到代碼界面,看到如下的代碼:

Public Class Form1

    
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesButton1.Click

   
 End Sub
End Class

         這部分代碼跟我們之前見過的很像,之前的那個過程是Form1_Load,就是在Form1加載過程中執行的代碼。而這個是Button1_Click,從名字上看,是Button1被點擊時執行的代碼段。

         我們定義函數和過程,必須在Class和End Class關鍵字的里面,不過也不能在一個過程里面定義過程,過程或函數之間應該是分開的,不能重疊。例如定義一個AddFun,完整的代碼就是:

Public Class Form1

   
 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesButton1.Click

   
 End Sub

   
 Function AddFun(ByVal a As Integer, ByVal b As Integer) As Integer
        Return a + b
    End Function
End Class

         把調用的代碼放在Button1_Click過程中,因為點擊按鈕時就會執行里面的代碼。完整的代碼如下:

Public Class Form1

   
 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesButton1.Click
        Dim ret As Integer = AddFun(3, 4)
       
 MsgBox(ret)
   
 End Sub

   
 Function AddFun(ByVal a As Integer, ByVal b As Integer) As Integer
        Return a + b
    End Function

End Class

         按F5,生成成功后,出現Form1,點擊按鈕,彈出消息框如圖:

第三章 <wbr>VB.net基礎知識——《X教程——VB.net從入門到精通》

 

         也許讀者對這兩行代碼會有疑問:

Dim ret As Integer = AddFun(3, 4)
MsgBox(ret)

         上面這兩行代碼中,第一行定義了一個整數變量ret,並賦初始值AddFun(3,4),也就是7,這應該沒有問題。但是在第二行中,我們之前說過,MsgBox的第一個參數是字符串,也就是String。但是ret是Integer,為什么能放進MsgBox中呢,而且編譯過程還沒有警告。

         事實上,這涉及到數據格式間的隱形轉換,在后面的章節中我們會討論這個問題。現在讀者只需要知道,直接把整數甚至浮點數放在MsgBox中作為參數是可以的,因為程序會自動將它轉換成字符串。

         上面我們提到過參數有兩種傳遞方式,分別是ByVal和ByRef,下面定義一個用於測試的過程:

Sub SubTest(ByVal a As String, ByRef b As String)
   
 a = "Changed"
    b = "Changed"
End Sub

         上面這個過程有兩個參數,第一個是ByVal按值傳遞,第二個ByRef是按地址傳遞。按照我們的設想,當傳入兩個變量作為參數的時候,第二個變量應該會被改為“Changed”。其實在過程代碼執行的時候,這些修改都是有效的,只不過ByVal的參數的修改是對於一個值,而ByRef的參數修改則是對於傳入的變量。因此ByVal的參數修改會在過程結束后丟失,而ByRef的可以保存。

         雙擊Button2,在Button2_Click過程中輸入如下代碼:

Dim Str1, Str2 As String
Str1 = "Not Changed"
Str2 = "Not Changed"

         第一句代碼定義了兩個String變量Str1和Str2,並在第二第三句中將它們的值都賦為“Not Changed”。如果將這兩個變量作為參數傳入過程SubTest,后一個參數應該會變為“Changed”,是否真的是這樣呢?在上面的三句變量后面再加上:

SubTest(Str1, Str2)
MsgBox(Str1 + Str2)

         這里的第一句把Str1和Str2作為參數傳遞給SubTest,在SubTest中對它們作了重新的賦值。第二句把Str1和Str2連接起來並輸出。按F5編譯,在點擊Button2的時候出現了如圖的消息框:

第三章 <wbr>VB.net基礎知識——《X教程——VB.net從入門到精通》

 

         可見,在執行SubTest之后,Str1的值仍然是“Not Changed”,而Str2的值改為了“Changed”,和我們的預想是一樣的。

         接下來讓我們復習一下常量,為什么放在最后呢?因為常量的使用是很少的,讀者只需要有常量的概念即可。

         在開始之前,先來看看剛才寫的Button2_Click過程:

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    Dim Str1, Str2 As String
    Str1 = "Not Changed"
    Str2 = "Not Changed"
    SubTest(Str1, Str2)
   
 MsgBox(Str1 + Str2)
End Sub

         這里定義了兩個變量,Str1和Str2。我們之前說過,Dim定義的是局部變量,實際上這個說法是不准確的。Dim定義的變量,如果放在過程或函數的外面,就是全局變量。只不過如果定義的是局部變量,就只能使用Dim。

         如果讀者對於局部變量和全局變量沒有概念,筆者在這里作一個解釋。局部變量是定義在函數或者過程中的,在執行過程中分配內存,執行完這個函數或者過程之后,內存就被釋放。換句話說,別的函數或過程是訪問不了它的,只能在定義它的代碼段中訪問。

         而全局變量是定義在Class中,Sub或Function外的,按照筆者的習慣,它們一般寫在程序的第二行代碼處。寫在Sub或Function外的變量或者常量,可以被本Class中所有Sub或Function訪問,而且對於變量,在函數或過程結束后仍然保留對它的修改。

         現在讓我們定義一個全局常量,在Public Class Form1之后空出一行,寫入如下代碼:

Const PI As Double = 3.141592653

         可以看見全局常量和局部常量的定義是完全一樣的,不同點只在於寫的位置。

         由於PI是全局常量,它可以在任意一個函數或過程中訪問了。

         雙擊Button3,生成Button3_Click過程。在Button3_Click過程中鍵入如下代碼:

Dim r As Double = 5
MsgBox(PI * r * r)

         這里的代碼,第一行定義了一個浮點數r,並賦初值5,用於表示圓的半徑。第二行代碼計算了圓的面積,圓周率正是使用了全局常量PI。

         按F5運行,點擊Button3,彈出的消息框如圖:

第三章 <wbr>VB.net基礎知識——《X教程——VB.net從入門到精通》

 

         輸出的結果就是半徑為5的圓的面積。

         作為本章的實例,有些零散地復習了本章的內容。如果讀者有疑問,請在進入下一章的學習之前把這些內容搞懂。下一章我們將開始學習程序的流程控制,也就是我們常常聽說的If結構、For結構等等。這些知識遠比本章的復雜,需要記憶的內容比較多,不過在熟練使用之后,就不存在記憶的問題了。

         下面貼出本實例App03的全部代碼:

Public Class Form1
    Const PI As Double = 3.141592653

   
 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesButton1.Click
        Dim ret As Integer = AddFun(3, 4)
       
 MsgBox(ret)
   
 End Sub

   
 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesButton2.Click
        Dim Str1, Str2 As String
        Str1 = "Not Changed"
        Str2 = "Not Changed"
        SubTest(Str1, Str2)
       
 MsgBox(Str1 + Str2)
   
 End Sub

   
 Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesButton3.Click
        Dim r As Double = 5
        MsgBox(PI * r * r)
   
 End Sub

   
 Function AddFun(ByVal a As Integer, ByVal b As Integer) As Integer
        Return a + b
    End Function

   
 Sub SubTest(ByVal a As String, ByRef b As String)
       
 a = "Changed"
        b = "Changed"
    End Sub
End Class

         上面的代碼中,按照筆者的習慣,全局變量及常量是放在第一行后面的,這樣寫可以方便查閱。當然讀者可以按照自己的習慣寫,但是務必要工整,這樣的代碼可讀性才高。

         本實例App03的下載地址:

http://sdrv.ms/PTQE2g

         希望讀者能自己寫一次這個實例,如果能不看書寫出來,說明這章的知識你已經鞏固了。確認你掌握了本章的知識之后,趕快進入下一章的學習吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM