- C#從入門到精通(第2版)
- 龍馬高新教育策劃 國家863中部軟件孵化器編著
- 89字
- 2019-01-02 05:29:04
第4章 變量與常量
本章視頻教學(xué)錄像:23分鐘
通過第3章的學(xué)習(xí),我們對C#的數(shù)據(jù)類型及類型轉(zhuǎn)換有了簡單的了解。每一門語言都有各自的變量和常量的命名與使用規(guī)則,本章主要介紹常量與變量的相關(guān)內(nèi)容。
本章要點(diǎn)(已掌握的在方框中打鉤)
□ 變量
□ 匿名變量
□ 常量
4.1變量
本節(jié)視頻教學(xué)錄像:6分鐘
變量是編程語言中最基本的元素。變量是一個名稱,表示程序執(zhí)行時(shí)存儲在內(nèi)存中的數(shù)據(jù)。當(dāng)需要訪問存儲在變量中的信息時(shí),只需要使用變量的名稱即可。
4.1.1變量的命名
C#是一種對大小寫敏感的語言,變量命名需要遵循如下規(guī)則。
(1) 變量名必須以字母或下畫線開頭,只能由字母(大寫和小寫)、數(shù)字和下畫線組成。
(2) 變量名不能包含空格、標(biāo)點(diǎn)符號、運(yùn)算符字符。
(3) 變量名不能與C#中的關(guān)鍵字、運(yùn)算符或函數(shù)名同名。
(4) 使用多個單詞組合為變量名時(shí),使用駱駝命名法(camelCase),即第1個單詞的首字母小寫,其他單詞的首字母大寫。
注意
C#不能用關(guān)鍵字做變量名,但C#允許在關(guān)鍵字的前面加上前綴“@”作為變量的名字,如@using是合法的變量名。引入“@”的目的在于與其他語言進(jìn)行交互時(shí)避免沖突。建議盡量不要使用前綴“@”作為變量名的一部分。
下面給出一些合法與不合法的變量名例子。
2a //不合法,以數(shù)字開頭 number.1 //不合法,含有非法字符'.' numberOne //合法 break //不合法,break為關(guān)鍵字 mod //不合法,mod為運(yùn)算符 Main //不合法,Main為函數(shù) intAge //合法,使用駱駝命名法
4.1.2變量的聲明和賦值
變量的聲明語法如下。
[訪問修飾符] [變量修飾符] 變量的數(shù)據(jù)類型 變量名
其中訪問修飾符和變量修飾符可以省略,這將在9.2節(jié)中介紹。變量聲明和賦值如下所示。
01 private int x; //聲明x為整型變量,private可以省略 02 x=10; //變量的賦值,讓變量x的值為10 03 string name="John"; //聲明一個字符串變量name,值為John
也可以在聲明變量的同時(shí)賦值,如:
int x=10;
也可以在一行聲明多個變量,如:
int x=3,y=8; //不同變量之間用逗號隔開
4.1.3 隱式類型的局部變量
隱式類型的局部變量又叫匿名變量,是C# 3.0版本中引入的一個新用法,使用關(guān)鍵字var來聲明。可以用var聲明任何類型的局部變量,它只是負(fù)責(zé)告訴編譯器,該變量需要根據(jù)初始化表達(dá)式來推斷變量的類型,而且只能是局部變量。
語法如下。
var 變量名稱=變量值;
例如,
01 var i=8; //定義局部變量i,i作為整型數(shù)據(jù)被編譯 02 var s="Hello C#!"; //定義局部變量s,s作為字符串?dāng)?shù)據(jù)被編譯
4.2常量
本節(jié)視頻教學(xué)錄像:12分鐘
常量就是在程序運(yùn)行過程中值保持不變的量,即在程序執(zhí)行期間,常量的值不會發(fā)生改變。可以在代碼的任何位置用常量代替實(shí)際值。如定義const PI=3.14159265,這里使用PI來代替數(shù)值3.14159265。常量聲明時(shí)需要包含常量的名稱和常量的值,其格式如下。
[訪問修飾符號] const 類型 常量表達(dá)式;
其中“訪問修飾符號”可以省略。常量的修飾符可以是new、public、protected、internal、private等。常量的表達(dá)式表示常量的名字。如下所示。
public const int x=3, y=8;//定義int型常量x和y,其值分別是3和8
可以在一行聲明多個常量。不過如果每行只聲明一個常量,代碼會更具有可讀性。
【范例4-1】 定義常量和變量,熟悉常量、變量的使用。
⑴ 在VisualStudio 2013中新建C#控制臺程序,項(xiàng)目名為“ConsVarDemo”。
⑵ 在Program.cs的Main方法中輸入以下代碼(代碼4-1.txt)。
01 const int months=12; //定義常量months 02 const int weeks=52; //定義常量weeks 03 const int days=365; //定義常量days 04 //可以使用定義過的常量聲明新的常量 05 const double daysPerWeek=(double)days/(double)weeks; //定義常量daysPerWeek
06 const double daysPerMonth=(double)days/(double)months; //定義常量daysPerMonth 07 string name="Tom"; //定義變量name 08 int annualSalary=500000; //定義變量annualSalary 09 loat monthSalary=annualSalary/months; //定義變量monthSalary 10 float weekSalary=annualSalary/weeks; //定義變量weekSalary 11 float daySalary=annualSalary/days; //定義變量daySalary 12 Console.WriteLine("常量變量演示結(jié)果:"); //輸出常量和變量的值 13 Console.WriteLine("double型常量daysPerWeek的值是:{0}",daysPerWeek); 14 Console.WriteLine("double型常量daysPerMonth的值是:{0}",daysPerMonth); 15 Console.WriteLine("float型變量monthSalary的值是:{0}",monthSalary); 16 Console.WriteLine("{0}的年薪是:{1}元",name,annualSalary); 17 Console.WriteLine("{0}的月薪是:{1}元",name,monthSalary); 18 Console.WriteLine("{0}的周薪是:{1}元",name,weekSalary); 19 Console.WriteLine("{0}的日薪是:{1}元",name,daySalary); 20 Console.ReadKey(); //暫停程序的運(yùn)行直到輸入任意鍵 21 Console.ReadLine();
【代碼詳解】
代碼1~3行定義了3個常量;第5~6行,利用聲明過的常量定義兩個新常量;第7~11行聲明了5個3種不同類型的變量;第13~19行,采用Console的WriteLine方法輸出格式字符串來進(jìn)行信息輸出,其中采用輸出格式字符串的方式在C#中經(jīng)常使用,這種方式包含兩個參數(shù):格式字符串和變量列表,{0}和{1}作為占位符出現(xiàn)在字符串中,代表后面依次排列的變量的值出現(xiàn)的位置。
【運(yùn)行結(jié)果】
單擊工具欄中的按鈕,即可在控制臺中輸出如下圖所示的結(jié)果。

【范例分析】
在這個實(shí)例中定義了常量months、weeks和days,使用定義過的常量聲明新的常量daysPerWeek、daysPerMonth,并強(qiáng)制進(jìn)行了類型轉(zhuǎn)換,把int轉(zhuǎn)為double類型;定義了多個變量,并采用格式字符串的形式輸出。在這里需注意,計(jì)算monthSalary等變量沒有進(jìn)行類型轉(zhuǎn)換,故monthSalary等變量的賦值結(jié)果最終是int類型。
【拓展訓(xùn)練】
把【范例4-1】改成隱式類型的局部變量重新運(yùn)行。
分別聲明多個常量和多個變量,變量類型根據(jù)賦的值自動確定。代碼如下(拓展代碼4-1.txt)。
01 const int months=12; //定義常量 02 const int weeks=52; //定義常量 03 const int days=365; //定義常量 04 //可以使用定義過的常量聲明新的常量 05 const double daysPerWeek=(double)days/(double)weeks; //定義常量 06 const double daysPerMonth=(double)days/(double)months; //定義常量 07 var flag=true; //定義var變量,賦值為布爾型數(shù)據(jù) 08 var name="Tom"; //定義var變量,賦值為字符串 09 var annualSalary=500000; //定義var變量,賦值為整型 10 var monthSalary=annualSalary/months; //定義var變量,根據(jù)表達(dá)式的值確定類型 11 var weekSalary=annualSalary/weeks; //定義var變量,根據(jù)表達(dá)式的值確定類型 12 var daySalary=annualSalary/days; //定義var變量,根據(jù)表達(dá)式的值確定類型 13 var x=Math.Exp(2); //定義var變量,根據(jù)表達(dá)式的值確定類型 14 var y=name.Length; //定義var變量,賦值為整型 15 Console.WriteLine("double型常量daysPerWeek的值是:{0}", y); 16 Console.WriteLine("常量變量演示結(jié)果:"); //以下語句用來輸出結(jié)果 17 Console.WriteLine("double型常量daysPerWeek的值是:{0}", daysPerWeek); 18 Console.WriteLine("double型常量daysPerMonth的值是:{0}", daysPerMonth); 19 Console.WriteLine("匿名變量flag的值是:{0}", flag); 20 Console.WriteLine("匿名變量monthSalary的值是:{0}", monthSalary); 21 Console.WriteLine("{0}的年薪是:{1}元", name, annualSalary); 22 Console.WriteLine("{0}的月薪是:{1}元", name, monthSalary); 23 Console.WriteLine("{0}的周薪是:{1}元", name, weekSalary); 24 Console.WriteLine("{0}的日薪是:{1}元", name, daySalary); 25 Console.ReadKey(); 26 Console.ReadLine();
技巧
匿名變量聲明的同時(shí)必須賦值,聲明一個匿名變量后不能給它賦另一類型的值;匿名變量初始化不能為null(空值),匿名變量僅限于聲明局部變量。
【運(yùn)行結(jié)果】
運(yùn)行結(jié)果如下圖所示。

4.3高手點(diǎn)撥
本節(jié)視頻教學(xué)錄像:2分鐘
變量和常量有什么區(qū)別和聯(lián)系,使用常量有什么優(yōu)點(diǎn)?
常量即程序運(yùn)行的過程中它的值不發(fā)生改變的變量。在聲明和初始化時(shí),在變量的前面加上const關(guān)鍵字,把此變量聲明成為常量。只有局部變量、字段才能被聲明為常量。
其特征如下。
常量聲明時(shí)必須要初始化,賦值后不能再改變,而且所賦的值在程序編譯的過程中要能用于計(jì)算。其次常量一般都是靜態(tài)的,但也不用在聲明常量時(shí)在其前面加上static。
為了使程序更加通俗易懂、更加方便于修改等,這個時(shí)候我們就可以使用常量。用一個簡單易懂的英文字母組合來代替程序中多次出現(xiàn)的數(shù)字等,例如,某種商品的價(jià)格或單價(jià)。這就是使用常量的優(yōu)點(diǎn)。
變量實(shí)際上代表的是數(shù)據(jù)真實(shí)的存儲位置。變量的類型決定了它存儲的數(shù)值。必須先給變量聲明類型之后才能賦值。嚴(yán)格語法格式有兩種。
變量類型 變量名稱;
變量類型 變量名稱=值;
第一種只聲明了變量的類型,沒有賦值;第二種聲明了類型且賦了值,且賦的值必須與變量的類型一致。也就是說數(shù)據(jù)要存放在合理的數(shù)據(jù)類型里面,例如,勺子是用來喝湯的,筷子是用來吃面的。另外一種情形,例如,打完球,喝完了飲料,還是很渴,有水但沒有杯子,怎么辦?可以用飲料的瓶子接水喝。由于飲料和水都是液體,也就是說數(shù)據(jù)的類型沒變,數(shù)據(jù)發(fā)生變化了,只是給變量重新賦值而已。
4.4實(shí)戰(zhàn)練習(xí)
一、思考題
C#中變量命名規(guī)則有哪些?
二、操作題
1. 創(chuàng)建一個控制臺程序,驗(yàn)證短整型變量的取值范圍。
2. 創(chuàng)建一個控制臺程序,定義一個常量pi賦值為3.14,輸入半徑,計(jì)算圓的周長和面積。
- Android平板電腦開發(fā)實(shí)戰(zhàn)詳解和典型案例
- GitLab CI/CD 從入門到實(shí)戰(zhàn)
- Java高手真經(jīng)·編程基礎(chǔ)卷:Java核心編程技術(shù)
- 軟件測試面試突擊:為自己贏得一份測試工程師職位
- Android應(yīng)用安全防護(hù)和逆向分析
- 無網(wǎng)格法理論及MATLAB程序
- 軟件測試之魂:核心測試設(shè)計(jì)精解
- 項(xiàng)目實(shí)踐精解:基于EJB 3.0和Web Services的Java應(yīng)用開發(fā)
- Spring Boot+Vue 3大型前后端分離項(xiàng)目實(shí)戰(zhàn)
- 軟件之美
- OpenGL ES 2.0游戲開發(fā)(上卷)
- 軟件工程最佳實(shí)踐
- Cocos2d-X案例開發(fā)大全
- 低代碼開發(fā)平臺的設(shè)計(jì)與實(shí)現(xiàn):基于元數(shù)據(jù)模型
- OpenShift高效運(yùn)維:SRE視角的集群和分布式系統(tǒng)管理