天天看點

vb.net的變量

 在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”關鍵字,靜态變量要慎用,因為一旦聲明了靜态變量,這個變量就會常駐記憶體,如果聲明的靜态變量很多,有可能影響系統的性能。

來源:http://www.bianceng.cn/Programming/VB_NET/200705/1269.htm