- 21天學通C#
- 秦婧等編著
- 1793字
- 2018-12-29 13:23:25
2.2 變量和常量
變量是指在程序運行的過程中,值可以發生變化的量。常量是指在程序運行的過程中,值不會發生變化的量。在聲明常量時,需聲明程序中要用到的常量名稱并對它進行賦值。常量可以是任何一種值類型或引用類型。例如,圓周率PI就是一個常量,因為它的值是不變的。
2.2.1 命名變量
變量的命名要有意義,要能見名知其意。這樣能給代碼的維護和閱讀帶來極大的方便,也是讀者應該要練習和養成的良好編程習慣。除了以下這些規則以外,筆者推薦學習匈牙利命名法。關于該命名法,在本書7.3.3節中有介紹,讀者可以參考或提前學習。變量的命名規則如下:
· 變量名必須以字母開頭,名字中間只能由字母、數字和下畫線“_”組成;
· 變量名的長度不能超過255個字符;
· 變量名在有效的程序范圍內必須是唯一的;
· 變量名不能是保留字(關鍵字),但可以把保留字嵌入變量名。
例如:命名一個學生的名字StuName,這樣一眼就看出是學生名字的變量。
提示:C#語言對大小寫是很敏感的,這是.NET公共類型規范CTS中的特性。但是在VB.NET中不區分大小寫。VB.NET通過CLR編譯成中間語言后,系統自動做了類型轉換,是VB.NET的編譯環境自動完成的。所以從整個.NET平臺來看,是區分大小寫的。
在C#語言中,不能使用沒有初始化的變量。在C#語言的面向對象里,對象的成員變量由編譯器負責清零。而局部變量,則由程序員負責清零。
2.2.2 聲明和使用變量
在C#語言中,變量有很多種類型,可分為靜態變量、局部變量、實例變量、數組變量、值參數、引用參數、輸出參數7種。
通過“static”聲明的變量就是靜態變量。靜態變量在創建并被加載后即能生效。無論創建了多少個靜態變量,它都只會有一個副本。例如,聲明一個靜態變量static int i=1;。
注意:在聲明靜態變量時,最好為它賦值,這樣才是安全的。
局部變量就是只在局部作用域里發生作用的變量。它的生效范圍定義在它的代碼塊內。塊指的就是兩個大括號“{”“}”之間,在塊內可以是一條語句,也可以有多條或者空語句。局部變量從開始聲明的地方生效,當塊結束后,局部變量也消失了。
【范例2-5】下面來演示局部變量的聲明和使用。在主函數中分別輸出變量名相同的變量值,但是兩個變量的作用范圍不同,它們只是局部發生作用,如示例代碼2-5所示。
示例代碼2-5
01 using System; //包含基本類和基類 02 …… //還有其他命名空間,也是系統生成,在此省略 03 namespace Ex_2_5 //程序的命名空間,也是項目名稱,如Ex_2_5 04 { 05 class Program 06 { 07 static void Main(string[] args) //主函數,也是入口函數 08 { 09 Program data = new Program();//創建對象,Program是一個類,在第4章中有 //介紹 10 data.fnTest1(); //輸出fnTest1()中的i 11 data.fnTest2(); //輸出fnTest2()中的i 12 Console.ReadLine(); //獲取輸入焦點,為了看運行結果 13 } 14 public void fnTest1() //公有函數fnTest1() 15 { 16 int i; //局部變量,它的作用范圍只在fnTest1()中 17 i = 100; //必須先賦值才能使用 18 Console.WriteLine(i); //輸出fnTest1中的i 19 } 20 public void fnTest2() //公有函數fnTest2() 21 { 22 int i; //此處的i作用范圍只在fnTest2()中 23 i=200; //必須先賦值才能使用 24 Console.WriteLine(i); //輸出fnTest2中的i 25 } 26 } 27 }
【運行結果】選擇“調試”|“啟動調試”選項運行程序,結果如圖2.8所示。

圖2.8 整數的聲明
【代碼解析】可以看出,在上述代碼中含有兩個同名的整型局部變量i。但是由于它們的作用域不同,所以互不影響。沒有“static”修飾的變量就是實例變量。當一個類被實例化以后,就生成了屬于該類的實例變量。當執行了類的析構函數后,它生成的實例變量就會失效。
注意:在C#中,局部變量必須先賦值,然后才能使用。
2.2.3 聲明和使用常量
在C#中定義常量的方式有兩種:一種叫做靜態常量(Compile-time constant),另一種叫做動態常量(Runtime constant)。前者用“const”來定義,后者用“readonly”來定義。兩者之間的區別如表2.2所示。
表2.2 靜態常量和動態常量的區別和聯系

1.靜態常量的使用
用const關鍵字來聲明靜態常量。例如聲明一個公有的靜態常量MAX并賦值public const int MAX=10;靜態常量在聲明時必須賦值。但是用const來聲明常量時,在類型上有很多限制。首先,要聲明的類型必須屬于值類型,然后,聲明的類型初始化不能通過new來完成。因此,一些用struct聲明的值類型常量也不能用const來聲明。
2.動態常量的使用
相對于const關鍵字而言,使用readonly來聲明動態常量則要靈活得多。如聲明一個公有的動態常量MAX并賦值public readonly int MAX=10;系統會為readonly所聲明的常量分配內存空間,就像類的其他成員一樣擁有獨立的空間。此外,readonly所聲明的常量除了在聲明時可以賦值外,還可以在類的構造函數中進行賦值。由于readonly所聲明的常量相當于類的成員,因此使用readonly不像const關鍵字那樣有類型限制,可以用readonly去聲明任何類型的常量。
注意:在程序設計中,一般常量都用大寫字母來表示,例如圓周率PI在程序中定義為常量時就寫成PI。