在Visual Basic執行應用程序期間,用變量臨時存儲數值。變量具有名字(用來引用變量所包含的值的詞)和數據類型(確定變量能夠存儲的數據的種類)。可以把變量看作內存中存放未知值的所在處。例如,假定正在為水果命鋪編一個銷售蘋果的程序。在銷售實際發生之前並不知道蘋果的價格和銷量。此時,可以設計兩個變量來保存未知數,將它們命名為“ApplePrice”和“ApplesSold”。每次運行程序時,用戶就這兩個變量提供具體值。為了計算總的銷售額,並且將結果顯示在名叫“txtSales”的文本框中,代碼應該是這樣的:
txtSales.txt=ApplePrice*ApplesSold
每次根據用戶提供的數值,這個表達式返回不同的金額。由於有了變量,就可以設計一個算式,而不必事先知道實際的輸入是多少。在這個例子中,“ApplePrice”的數據類型是十進制型,而“ApplesSold”的數據類型是整數。變量還可以表示許多其他數值,比如:存儲文本數值、日期、各種數值類型,甚至對象也包括在內。
1.存儲和檢索變量中的數據
用賦值語句進行計算,並將結果賦予變量:
ApplesSold=10 '將值10傳給變量
ApplesSold=ApplesSold+1 '變量值增一
注意:例子中的等號是賦值符,不是等於操作符,它將數值10賦予變量ApplesSold。
2.聲明變量
聲明變量就是事先將變量通知程序。要用“Dim”語句來聲明變量,“Dim”語句提供了變量名:
Dim Variablename As Type
在過程內部用“Dim”語句聲明的變量,只有在該過程執行時才存在。過程一結束,存儲該變量的內存空間也就釋放了。此外,過程中的變量值對過程來說是局部的,也就是說,無法在一個過程中訪問另一個過程中的變量。由於這些特點,在不同過程中就可使用相同的變量名,而不必擔心沖突發生以及編譯時出現錯誤。
變量名有以下命名原則:
·必須以字母開頭
·不能包含嵌入的(英文)句號或者嵌入的類型聲明字符
·不得超過255個字符
·在同一個范圍內必須是惟一的
范圍就是可以引用變量的域,如一個過程、一個函數等。由於“Dim”語句中的可選的“As Type”子句,可以定義被聲明變量的數據類型或對象類型。數據類型定義了變量所存儲信息的類型。變量也可以包含來自Visual Basic或其他應用程序的對象,如“Form”和“TextBox”等。
注意:“As Type”在默認的情況下是必寫的,如果要將“As Type”變成可選的,則需將工程屬性頁中的“Build”選項中“Option strict”設置為“Off”,這樣在沒有“As Type”的變量聲明中,“Object”類型是其默認的數據類型。
(1).隱式聲明
將工程屬性頁中的“Build”選項中“Option strict”設置為“Off”,則工程中便允許陷式聲明,即在使用一個變量之前並不必先聲明這個變量。例如,可以書寫這樣一個函數,在其中就不必在使用變量TempVal之前先聲明它:
Function SafeSqr(num)
TempVal=Abs(num)
SafeSqr=Sqr(TempVal)
End Function
Visual Basic用這個名字自動創建一個變量,使用此變量時,可以認為它就是聲明過的。雖然這種方法很方便,但是如果把變量名拼錯了的話,會導致一個難以查找的錯誤。例如,假定這個函數寫成:
Function SafeSqr(num)
TempVal=Abs(num)
SafeSqr=Sqr(TemVal)
End Function
看起來,這兩段代碼好象是一樣的。但是因為在倒數第二行把“TempVal”變量名寫錯了,所以函數總是返回0。當Visual Basic遇到新名字,它分辯不出這是變量名寫錯了,於是用這個名字再創建一個新的變量。
(2).顯式聲明
為了避免寫錯變量名引起的麻煩,可以規定,只要遇到一個未經明確聲明就當成變量的名字,Visual Basic都發出錯誤警告。要顯式聲明,只需將工程屬性頁中的“Build”選項中的“Option Explicit”設置為“on”即可。如果對包含“SafeSqr”函數的窗體或標准模塊執行該語句,那麼Visual Basic將認定“TempVal”和“Temval”都是未經聲明的變量,並為兩者都發出錯誤信息。隨後就可以顯式聲明“TempVal”:
Function SafeSqr(num)
Dim TempVal
TempVal=Abs(num)
SafeSqr=Sqr(TempVal)
End Function
因為Visual Basic對拼錯了的“TemVal”顯示錯誤信息,所以能夠立刻明白是什麼問題。由於“Option Explicit”有助於編譯系統的出錯處理,所以一般來說在編寫代碼之前要將其設置為“on”.
3.理解變量的范圍
變量的范圍確定了能夠訪問該變量存在的那部分代碼。在一個過程內部聲明變量時,只有過程內部的代碼才能訪問或改變那個變量的值;它有一個范圍,對該過程來說是局部的。但是,有時需要使用具有更大范圍的變量,例如這樣一個變量,其值對於同一模塊內的所有過程都有效,甚至對於整個應用程序的所有過程都有效。Visual Basic允許在聲明變量時指定它的范圍。
4.過程內部使用的變量
過程級變量只有在聲明它們的過程中才能被識別,它們又被稱為局部變量。用“Dim”關鍵字來聲明它們,例如:
Dim intTemp As Integer
在整個應用程序運行時,用“Dim”聲明的變量只在過程執行期間才存在。對任何臨時計算來說,局部變量是最佳選擇。例如,可以建立十幾個不同的過程,每個過程都包含稱作“intTemp”的變量。只要每個“intTemp”都聲明為局部變量,那麼每個過程只識別它自己的“intTemp”版本。任何一個過程都能夠改變它自己的局部的“intTemp”變量的值,而不會影響到別的過程中的“intTemp”變量。
5.模塊內部使用的變量
按照缺省規定,模塊級變量對該模塊的所有過程都可用,但對其他模塊的代碼不可用。可在模塊頂部的聲明段用Private關鍵字聲明模塊級變量,從而建立模塊級變量。例如:
Private intTemp As integer
在模塊級,“Private”和“Dim”之間沒有什麼區別,但“Private”更好些,因為很容易把它和“Public”區別開來,使代碼更容易理解。
所有模塊使用的變量
為了使模塊級的變量在其他模塊中也有效,用“Public”關鍵字聲明變量。公用變量中的值可用於應用程序的所有過程。和所有模塊級變量一樣,也在模塊頂部的聲明段來聲明公用變量,例如:
Public intTemp As Integer
注意:不能在過程中聲明公用變量,只能在模塊的聲明段中聲明公用變量。
6.靜態變量
變量有其生存的周期,在這一期間變量能夠保持它們的值。在應用程序的存活期內一直保持模塊級變量和公用變量的值。但是,對於“Dim”聲明的局部變量以及聲明局部變量的過程,僅當過程在執行時這些局部變量才存在。通常,當一個過程執行完畢,它的局部變量的值就已經不存在,而且變量所占據的內存也被釋放。當下一次執行該過程時,它的所有局部變量將重新初始化。但可將局部變量聲明定義成靜態的,從而保留變量的值。在過程內部用“Shared”關鍵字聲明一個或多個變量,其用法與“Dim”語句完全一樣:
Shared Depth
例如,下面的函數將存儲在靜態變量“Accumulate”中的以前的運營總值與一個新值相加,以計算運營總值。
Function RunningTotal(num)
shared ApplesSold As Integer
ApplesSold=ApplesSold+num
RunningTotal=ApplesSold
End Function
如果用“Dim”而不是“Shared”聲明“ApplesSold”,則以前的累計值不會通過調用函數保留下來,函數只會簡單地返回調用它的那個相同值。在模塊的聲明段聲明“ApplesSold”,並使它成為模塊級變量,由此也會收到同樣的效果。但是,這種方法一旦改變變量的范圍,過程就不再對變量排他性存取。由於其他過程也可以訪問和改變變量的值,所以運營總值也許不可靠,代碼將更難於維護。
注意:Visual Basic以前版本是用“Static”關鍵字來聲明變量,在vb.net中"Shared"關鍵字取代了“Static”關鍵字,靜態變量要慎用,因為一旦聲明了靜態變量,這個變量就會常駐內存,如果聲明的靜態變量很多,有可能影響系統的性能。