- C#實踐教程(第2版)
- 李乃文
- 2662字
- 2021-03-19 18:15:35
2.3 變量
變量和常量相當于為數(shù)據(jù)值指定的名稱。程序往往不是針對明確數(shù)據(jù)的,如一個程序的功能是根據(jù)長和寬,求一個矩形的面積。若只是固定長和寬的矩形,則直接用數(shù)據(jù)進行計算即可;而使用了變量的程序,通過變量作為長和寬的名稱,則改變變量的值,可求解出多個矩形的面積。
本節(jié)介紹變量的定義、命名規(guī)則、作用域和生命周期等。
2.3.1 變量的聲明和初始化
程序中的變量可以理解為數(shù)學中的變量,在數(shù)學函數(shù)中,x是一個沒有確定值的數(shù),如橢圓函數(shù)、拋物線函數(shù)、雙曲線函數(shù)等,圖形根據(jù)x的值而變化,程序中的變量也是如此。
變量由兩部分構(gòu)成,一個是變量的名稱,另一個是變量的值。如x=56,則變量名稱為x,值為56。
變量存儲可以變化的值,變量可以被聲明,可以被初始化,可以被賦值。對于聲明、初始化和賦值的作用,如下所示。
□ 聲明 告訴系統(tǒng),這個變量(數(shù)據(jù))的存在,系統(tǒng)將根據(jù)數(shù)據(jù)類型為其分派存儲空間。
□ 初始化 為變量指定一個初始的值。
□ 賦值 為變量指定一個值。
變量為一段有名稱的連續(xù)存儲空間,在源代碼中通過定義變量來申請并命名這樣的存儲空間,并且通過變量的名稱來使用這段存儲空間。
在C#中,變量就是存取信息的基本單元。對于變量,必須明確變量的名稱、類型、聲明以及作用域。另外,變量的值可以通過重新賦值或運算符運算后被改變。
C#中,用戶可以通過指定數(shù)據(jù)類型和標識符來聲明變量。如定義整型變量,名稱為num,則定義語句如下所示:
int num; 或者 int num=26;
上述語法代碼中涉及3個內(nèi)容:int、num和=26。其具體說明如下:
□ int 定義變量類型為整型。
□ num 變量名稱,也叫標識符。
□ =26 “=”在C#中為賦值符,該符號右邊的值26為變量的初始值,值類型初始值默認為0。若該符號在變量聲明后出現(xiàn),則變量的值將被修改為新的值。
初始化變量是指為變量指定一個明確的初始值,初始化變量時有兩種方式:一種是聲明時直接賦值;另一種是先聲明、后賦值。如下代碼分別使用兩種方式對變量進行初始化:
char usersex = '男'; //直接賦值 或者 string username; //先聲明 username = "陳洋洋"; //后賦值
另外,多個同類型的變量可以同時定義或者初始化,但是這些變量中間要使用逗號分隔,聲明結(jié)束時用分號結(jié)尾,如下所示:
string username, address, phone, tel; //聲明多個變量 int num1 = 12, num2 = 23, result = 35; //聲明并初始化多個變量
C#中初始化變量時需要注意以下事項:
□ 變量是類或者結(jié)構(gòu)中的字段,如果沒有顯式的初始化,默認狀態(tài)下創(chuàng)建這些時初始值時為0。
□ 函數(shù)中的變量必須進行顯式的初始化,系統(tǒng)不允許使用未賦值的變量,以維護代碼的安全。
2.3.2 變量的修飾
在變量的聲明語句中,可以對變量使用修飾符進行修飾,常見的修飾有7種類型:靜態(tài)變量、實例變量、數(shù)組元素、值參數(shù)、引用參數(shù)、輸出參數(shù)以及局部變量。
變量通常在類和函數(shù)中進行聲明,類中的變量又稱作類的字段,可以被類中的任何函數(shù)調(diào)用;而函數(shù)中聲明的變量只能在函數(shù)內(nèi)部使用。它們的具體說明如下所示:
□ 靜態(tài)變量 它是指使用static修飾符聲明的變量。
□ 實例變量 與靜態(tài)變量相對應(yīng),是指未使用static修飾符聲明的變量。
□ 數(shù)組元素 它是指作為函數(shù)成員參數(shù)的數(shù)組,它總是在創(chuàng)建數(shù)組實例時開始存在,在沒有對該數(shù)組實例的引用時停止存在。
□ 值參數(shù) 是指在方法中未使用ref或out修飾符聲明的參數(shù)。
□ 引用參數(shù) 它是指使用ref修飾符聲明的參數(shù)。
□ 輸出參數(shù) 它是指使用out修飾符聲明的參數(shù)。
□ 局部變量 它在應(yīng)用程序的某一段時間內(nèi)存在,局部變量可以聲明在塊、for語句、switch語句和using語句中。
提示
參數(shù)是在方法的定義和調(diào)用時使用的,將在本書第5章介紹。
2.3.3 變量的命名規(guī)則
變量的聲明需要為其指定一個名稱,但變量的命名并不是任意編寫的。在C#中為變量命名時需要遵循以下幾條規(guī)則。
□ 變量名稱必須以字母開頭。
□ 變量名稱只能由字母、數(shù)字和下劃線組成,而不能包含空格、標點符號、運算符等其他符號。
□ 名稱要為有實際意義的名稱,方便對程序的理解和維護。
□ 變量名稱不能與庫函數(shù)相同。
□ 變量名稱不能與C#中的關(guān)鍵字名稱相同,關(guān)鍵字是C#語法中被賦予特殊含義和用法的單詞或詞組。
提示
C#中有一點是例外的,那就是允許在變量名前加前綴@。在這種情況下可以使用前綴@加上關(guān)鍵字作為變量的名稱,這樣可以避免與其他語言進行交互時的沖突。但是一般不推薦讀者使用前綴@命名變量。
2.3.4 C#中的關(guān)鍵字
關(guān)鍵字是程序中有著特殊含義和用法的詞,如定義命名空間時使用的“namespace”關(guān)鍵字、定義類時使用的“class”關(guān)鍵字,以及引用命名空間時使用的“using”關(guān)鍵字,都有著指定的用法。
關(guān)鍵字不能作為變量的名稱,以避免在使用時與變量發(fā)生混淆。常見的關(guān)鍵字如表2-5所示。
表2-5 C#中的關(guān)鍵字

每一個關(guān)鍵字都有著確定的用法,常見的關(guān)鍵字及其用法如下所示。
□ base 用于訪問被派生類或構(gòu)造中的同名成員隱藏的基類成員。
□ catch 定義一個代碼塊,在特定類型異常拋出時,執(zhí)行塊內(nèi)代碼。
□ const 標識一個可在編譯時計算出來的變量值,即一經(jīng)指派不可修改的值。
□ enum 表示一個已命名常量群集的值類型。
□ finally 定義一個代碼塊,在程序控制流離開try代碼塊后執(zhí)行。參見try和catch。
□ foreach 用于遍歷一個群集的元素。
□ goto 一個跳轉(zhuǎn)語句,將程序執(zhí)行重定向到一個標簽語句。
□ namespace 定義一個邏輯組的類型和命名空間。
□ sizeof 一個操作符,以B(Byte)為單位返回一個值類型的長度。
□ throw 拋出一個異常。
□ try 異常處理代碼塊的組成部分之一。
□ typeof 一個操作符,返回傳入?yún)?shù)的類型。
□ using 當用于命名空間時,using關(guān)鍵字允許訪問該命名空間中的類型,而無須指定其全名。也用于定義finalization操作的范圍。
2.3.5 變量的作用域和生命周期
變量并不是在整個項目的運行中都有效的,它有著自己的作用域(作用范圍)和生命周期。一般情況下需要通過以下規(guī)則確定變量的作用域。
□ 只要變量所屬的類在某個作用域內(nèi),其字段(即成員變量)也在該作用域中。
□ 局部變量存在于聲明該變量的塊語句或方法結(jié)束的大括號之前的作用域。
□ 在for和while循環(huán)語句中聲明的變量只存在于該循環(huán)體內(nèi)。
如在命名空間下定義一個類,類中定義一個函數(shù);并在類和函數(shù)中分別定義變量,如練習2-2所示。
【練習2-2】
在命名空間Homework下定義類Program及其內(nèi)部的函數(shù)Main()、Show(),在Main()函數(shù)內(nèi)分別定義變量j和變量i,在Main()外定義變量num,代碼如下:
using System; namespace Homework { class Program { int num=30; static void Main() { int j=20; int i=5; Console.WriteLine(i+j+num); } static void Show() { Console.WriteLine(num); } } }
上述代碼中,變量num在類的定義之內(nèi),在函數(shù)Main()之外,因此num可以被類中所有函數(shù)調(diào)用,其生命周期與類的聲明周期一致;而變量j和i在函數(shù)Main()內(nèi)部,只能在Main()內(nèi)部使用,其生命周期與Main()函數(shù)一致。而同在一個類中的函數(shù)Show()可以使用變量num,不能使用Main()函數(shù)中的變量j和i。
變量的作用域只在某一個范圍內(nèi)有效,是相對于定義狀態(tài)的;而變量的生命周期是相對于運行狀態(tài)的,即程序運行某個方法時方法中的變量有效,當程序執(zhí)行完某個函數(shù)后,函數(shù)中的變量也就消失了。
- Building Modern Web Applications Using Angular
- Maven Build Customization
- 神經(jīng)網(wǎng)絡(luò)編程實戰(zhàn):Java語言實現(xiàn)(原書第2版)
- Python程序設(shè)計
- Internet of Things with Intel Galileo
- Full-Stack React Projects
- Learning Vaadin 7(Second Edition)
- C#實踐教程(第2版)
- Internet of Things with ESP8266
- Geospatial Development By Example with Python
- Clean Code in C#
- C++編程兵書
- FPGA嵌入式項目開發(fā)實戰(zhàn)
- 工業(yè)機器人離線編程
- Swift High Performance