- C# 2012程序設計實踐教程 (清華電腦學堂)
- 張冬旭
- 3035字
- 2021-03-26 17:16:26
2.3 變量與常量
變量是一個不確定的值,如數學方法中的拋物線,根據變量x的值不同,拋物線呈現不同的跨度。程序設計中也能夠遇到無確定的值或可以變化的值,如商品的價格在剛上市時價格較高,但季末處理時價格下降,那么商品的價格可以定義為變量;而這期間商品的成本是不會變的,可以定義為常量。
變量和常量相當于為數據指定的名稱,對數據的操作使用數據的名稱來執行,在為變量指定不同的數據時可獲取不同的執行結果。
本節介紹變量的聲明、初始化、命名規則、使用方法、作用域和生命周期;常量的聲明和使用等。
2.3.1 變量的聲明
變量存儲可以變化的值。變量可以被聲明,可以被初始化,可以賦值。變量由兩部分構成:變量的名稱和變量的值。如x="hello",則變量名稱為x,值為hello。聲明、初始化和賦值的作用如下。
(1)聲明:告訴系統這個變量(數據)的存在,系統將根據數據類型為其分派存儲空間。
(2)初始化:為變量指定一個初始的值。
(3)賦值:為變量指定一個數據值。
變量是一段有名稱的連續存儲空間,在源代碼中通過定義變量來申請并命名這樣的存儲空間,并且通過變量的名稱來使用這段存儲空間。
在C#中,變量就是存取信息的基本單元。變量在使用之前首先要進行聲明,聲明包括變量的名稱、類型、聲明以及作用域。另外,變量的值可以通過重新賦值或運算符運算后被改變。
C#中用戶可以通過指定數據類型和標識符來聲明變量。如定義整型變量,名稱為num,則定義語句如下所示。
int num;
或者
int num=3;
上述語法代碼中涉及三個內容:int、num和=3。其具體說明如下。
(1)int:定義變量類型為整型。
(2)num:變量名稱,也叫標識符。
(3)=3:“=”在C#中為賦值符,該符號右邊的值3為變量的初始值,值類型初始值默認為0。若該符號在變量聲明后出現,則變量的值將被修改為新的值。
變量的聲明需要為其指定一個名稱,但變量的命名并不是任意編寫的。在C#中為變量命名時需要遵循以下幾條規則。
(1)變量名稱必須以字母開頭。
(2)變量名稱只能由字母、數字和下劃線組成,而不能包含空格、標點符號、運算符等其他符號。
(3)名稱要有實際意義,方便對程序的理解和維護。
(4)變量名稱不能與庫方法相同。
(5)變量名稱不能與C#中的關鍵字名稱相同,關鍵字是C#語法中被賦予特殊含義和用法的單詞或詞組。
提示
C#中有一點是例外的,那就是允許在變量名前加前綴@。在這種情況下可以使用前綴@加上關鍵字作為變量的名稱,這樣可以避免與其他語言進行交互時的沖突。但是一般不推薦使用前綴@命名變量。
2.3.2 變量的使用
變量在初始化之后才能使用,初始化變量是指為變量指定一個明確的初始值,初始化變量時有兩種方式:一種是聲明時直接賦值;一種是先聲明、后賦值。如下代碼分別使用兩種方式對變量進行初始化:
char usersex = '男'; //直接賦值
或者
string username; //先聲明 username = "郭靖"; //后賦值
另外,多個同類型的變量可以同時定義或者初始化,但是這多個變量中間要使用逗號分隔,聲明結束時用分號結尾,如下所示。
string username, address, phone, tel; //聲明多個變量 int num1 = 1, num2 = 2, result = 3; //聲明并初始化多個變量
C#中初始化變量時需要注意以下事項。
(1)變量是類或者結構中的字段,如果沒有顯式初始化,默認狀態下創建這些時初始值為0。
(2)方法中的變量必須進行顯式初始化,系統不允許使用未賦值的變量,以維護代碼的安全。
在變量的聲明語句中,可以對變量使用修飾符進行修飾,常見的修飾有7種類型:靜態變量、實例變量、數組元素、值參數、引用參數、輸出參數以及局部變量。
變量通常在類和方法中進行聲明,類中的變量又稱作類的字段,可以被類中的任何方法調用;而方法中聲明的變量只能在方法內部使用。它們的具體說明如下。
(1)靜態變量:是指使用static修飾符聲明的變量。
(2)實例變量:與靜態變量相對應,是指未使用static修飾符聲明的變量。
(3)數組元素:是指作為方法成員參數的數組,它總是在創建數組實例時開始存在,在沒有對該數組實例的引用時停止存在。
(4)值參數:是指在方法中未使用ref或out修飾符聲明的參數。
(5)引用參數:是指使用ref修飾符聲明的參數。
(6)輸出參數:是指使用out修飾符聲明的參數。
(7)局部變量:在應用程序的某一段時間內存在,局部變量可以聲明在塊、for語句、switch語句和using語句中。
變量有著自己的生存周期,通常從變量被聲明開始,變量可以被使用;到一定的范圍之外,該變量將不能被使用。變量的作用域(作用范圍)和生命周期一般需要通過以下規則來確定。
(1)只要變量所屬的類在某個作用域內,其字段(即成員變量)也在該作用域中。
(2)局部變量存在于聲明該變量的塊語句或方法結束的大括號之前的作用域。
(3)在for和while循環語句中聲明的變量只存在于該循環體內。
如在命名空間下定義一個類,類中定義一個方法;并在類和方法中分別定義變量,如范例2所示。
【范例2】
控制臺下,在Program類中有Main()主方法。在主方法外部定義num變量和addnum變量,值分別為20和30。
在Program類中定義show()方法,有方法內定義的add變量,輸出num和add兩個變量相加的計算結果;在主方法中輸出num和addnum這兩個變量相加的計算結果,并調用show()方法,代碼如下。
class Program { static int num = 20; static int addnum = 30; static void Main(string[] args) { Console.WriteLine("20+30={0}", num + addnum); show(); Console.ReadLine(); } static void show() { int add = 20; Console.WriteLine("20+20={0}", num + add); } }
上述代碼的執行結果如下所示。
20+30=50 20+20=40
上述代碼中,變量num在類的定義之內,在方法Main()之外,因此num可以被類中所有方法調用,其生命周期與類的聲明周期一致;而add變量在show()方法中定義,只能夠在show()方法內部使用,Main()方法不能夠使用add變量。
變量的作用域只在某一個范圍內有效,是相對于定義狀態的;而變量的生命周期是相對于運行狀態的,即程序運行某個方法時方法中的變量有效,當程序執行完某個方法后,方法中的變量也就消失了。
2.3.3 常量
變量的值是可以被改變的,而常量的值不能夠被改變。程序中總是存在一些數據,這些數據的值長而復雜,容易出錯。使用常量來表示這些數據,相當于為數據定義一個簡易的名稱來參與程序的編寫,既使程序簡單易懂,又使數據不易出錯。
如將數值3.1415926定義為常量Pi,該數值是圓周率,但在程序中使用3.1415926數值較長,容易出錯,而使用常量Pi替代數值,可使程序清晰且不易出錯。
常量是指在使用過程中不會發生變化的量,C#中只能把局部變量和字段聲明為常量。應用程序中使用常量的好處如下。
(1)常量使程序更加容易修改。
(2)常量能夠避免程序中出現更多的錯誤。
(3)常量使用易于理解的清楚的名稱替代了含義不明確的數字或字符串,使程序更加方便閱讀。
常量也可以叫作常數,它是在編譯時已知并且在程序運行過程中其值保持不變的值。C#中聲明常量需要使用const關鍵字,并且常量必須在聲明時初始化。如聲明數值3.1415926為常量Pi,代碼如下。
const string Pi = 3.1415926;
讀者也可以使用一個const關鍵字同時聲明多個常量,但是這些常量之間必須使用逗號進行分隔,代碼如下。
public const int P = 12, S = 23, M = 45, N = 55;
注意
使用const關鍵字聲明常量時,通常使用大寫字母。如果沒有使用const,即使指定了固定的值,也不算是常量。
使用const關鍵字定義常量非常簡單,但是同時需要注意以下幾點。
(1)const必須在字段聲明時就進行初始化操作。
(2)const只能定義字段和局部變量。
(3)const默認是靜態的,所以它不能和static同時使用。
(4)const只能應用在值類型和string類型上,其他引用類型常量只能定義為null。否則會引發錯誤提示“只能用null對引用類型(string類型除外)的常量進行初始化”。
常量和變量經常會在程序開發中用到,但是什么情況下使用常量,什么情況下使用變量呢?很簡單,使用常量的情況一般有以下兩種。
(1)用于在程序中一旦設定就不允許被修改的值,如圓周率π。
(2)用于在程序中被經常引用的值,如銀行系統中的人民幣匯率。
- JavaScript全程指南
- Hands-On Machine Learning with scikit:learn and Scientific Python Toolkits
- OpenCV 3和Qt5計算機視覺應用開發
- Mastering Kotlin
- Python高級機器學習
- 高級C/C++編譯技術(典藏版)
- MATLAB定量決策五大類問題
- SQL基礎教程(視頻教學版)
- 基于Swift語言的iOS App 商業實戰教程
- Hands-On Reinforcement Learning with Python
- 程序是怎樣跑起來的(第3版)
- Spring 5 Design Patterns
- 算法訓練營:海量圖解+競賽刷題(入門篇)
- JavaScript程序設計基礎教程(慕課版)
- C#從入門到精通(微視頻精編版)