国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#編程自學(xué)之?dāng)?shù)據(jù)類型和變量一

2019-10-29 21:37:29
字體:
供稿:網(wǎng)友

本節(jié)課我們將學(xué)習(xí)C#編程語言的數(shù)據(jù)類型,數(shù)據(jù)類型可以分為值類型和引用類型,接著介紹變量的使用方法和作用域等內(nèi)容,為了方便大家理解,我們還會舉一些小例子作為說明。

一、數(shù)據(jù)類型與變量的介紹

在程序運(yùn)行的過程中計(jì)算機(jī)需要記錄大量的狀態(tài) 數(shù)據(jù)(這里我們統(tǒng)稱數(shù)據(jù))。那這些數(shù)據(jù)都存放在哪呢?程序在運(yùn)行過程中的數(shù)據(jù)一般都存放在內(nèi)存。那么他們在內(nèi)存中如何存放的一種描述就是數(shù)據(jù)類型。變量則就是數(shù)據(jù)類型的實(shí)體。那么我們來看一個例子: 假如現(xiàn)在需要設(shè)計(jì)一個程序計(jì)算整數(shù) 10 與 20 的和, 請看如下代碼:

 

 
  1. using System;  
  2.  
  3. namespace MyProgram  
  4. {  
  5. class Program  
  6. {  
  7. static void Main(string[] args)  
  8. {  
  9. //變量的定義格式:  
  10. //數(shù)據(jù)類型 變量名 賦值運(yùn)算符 值  
  11. int a = 10; // 定義一個整數(shù)類型的變量a 并賦值10  
  12. int b = 20; // 定義一個整數(shù)類型的變量b 并賦值20  
  13.  
  14. int c = a + b;//定義一個整數(shù)類型的變量b 賦值為 a + b 的和  
  15.  
  16. Console.WriteLine("10 + 20 = "+c.ToString());//打印結(jié)果  
  17. }  
  18. }  

分析: 首先要計(jì)算整數(shù)10與20的和,肯定需要有地方來放(在內(nèi)存中存儲)它們,既然計(jì)算整數(shù)那么我們就用整數(shù)的數(shù)據(jù)類 型int 定義名字為a 和 b的變量來分別存放10 和 20,在通過加法運(yùn)算符將和存放在變量c中。調(diào)用我們之前了解過的控制臺類將結(jié)果輸出到控制臺顯示出來,這里要注意c.ToString(), 因?yàn)槲覀冇?jì)算的是整數(shù),所使用變量的類型都是整數(shù),而控制臺輸出的是字符串,所以我們需要將調(diào)用int類型的一個行為ToString()將自己轉(zhuǎn)換為字符串類型!這部分將在數(shù)據(jù)類型的第三篇中介紹!

二、C#基本數(shù)據(jù)類型與變量

1.數(shù)據(jù)類型

C#的數(shù)據(jù)類型分為兩類:一種是值類型 一種是引用類型 (值類型與引用類型將在數(shù)據(jù)類型的第二篇中介紹),那么我們來看看C#的常用數(shù)據(jù)類型。

C#編程自學(xué)之?dāng)?shù)據(jù)類型和變量一

2.匿名類型

了解C#常用的基礎(chǔ)數(shù)據(jù)類型以后,我們在來看看匿名類型,什么是匿名類型呢?

匿名類型:匿名類型就是在變量初始化后根據(jù)所賦的值來判斷它屬于哪個類型。不明白沒關(guān)系,舉個例子:

 

 
  1. using System;  
  2.  
  3. namespace MyProgram  
  4. {  
  5. class Program  
  6. {  
  7. static void Main(string[] args)  
  8. {  
  9. int a = 20; //定義一個整數(shù)類型的變量  
  10. char b = 'A';//定義一個字符類型的變量  
  11.  
  12. var _intType = 20; //定義一個匿名類型的變量 給賦值一個整數(shù)數(shù)字 20  
  13. var _charType = 'A'//定義一個匿名類型的變量 給賦值一個字符 A  
  14.  
  15. Console.WriteLine(" a 的數(shù)據(jù)類型為:{0}",a.GetType().ToString()); //打印出變量a的數(shù)據(jù)類型  
  16. Console.WriteLine(" b 的數(shù)據(jù)類型為:{0}", b.GetType().ToString()); //打印出變量b的數(shù)據(jù)類型  
  17.  
  18. Console.WriteLine(" _intType 的數(shù)據(jù)類型為:{0}", _intType.GetType().ToString());//打印出變量_intType的數(shù)據(jù)類型  
  19. Console.WriteLine(" _charType 的數(shù)據(jù)類型為:{0}", _charType.GetType().ToString());//打印出變量_charType的數(shù)據(jù)類型  
  20. }  
  21. }  

首先看 9 ~ 10行,定義了一個整數(shù)類型的變量a賦值為20和一個字符類型的變量b為賦值為A,那么 a與b的數(shù)據(jù)類型分別為整數(shù)類型(System.Int32與System.Char).

接著看 12 ~ 13行,定義了兩個匿名類型的變量為: _intType,_charType,分別給 _intType賦了一個整數(shù)的值為20,給_charType賦了一個字符為A。在程序運(yùn)行之前編譯器會根絕變量所賦的值來自動判斷數(shù)據(jù)類型。

程序執(zhí)行結(jié)果如下:

C#編程自學(xué)之?dāng)?shù)據(jù)類型和變量一

提示:匿名類型變量在編譯后確定數(shù)據(jù)類型之后,在程序作用域內(nèi)該變量的數(shù)據(jù)類型不可改變!

3.變量與變量的作用域

變量:經(jīng)過上面的例子與介紹應(yīng)該已經(jīng)對變量不陌生了,變量就是數(shù)據(jù)類型的實(shí)例。真正用來存放數(shù)據(jù)的內(nèi)存空間或存放數(shù)據(jù)內(nèi)存空間地址。

作用域:作用域就是程序使用該變量的一個范圍。一般變量作用域的邊界是由符號{與}來劃定界限的,也就是說在{}內(nèi)定義的變量,就只能在{}內(nèi)部來調(diào)用。

C#的作用域可分為兩種級別:

1.類屬性級別:當(dāng)變量定義為類的屬性是,變量的作用域?yàn)檎麄€類的內(nèi)部可訪問。

2.局部級別:當(dāng)變量被定義在方法或者語句塊中,變量的作用域?yàn)樽罱膡}之間可訪問,局部級別的變量必須初始化。

關(guān)于作用域的問題:

1.當(dāng)一個類定義的變量(屬性)與該類方法中定義的局部變量重名時會怎么樣?

答:當(dāng)前作用域中的變量與上級作用域中的變量重名時,以當(dāng)前作用域中的變量為準(zhǔn)。

2.當(dāng)一個類定義的變量(屬性)重名或者類方法中定義的局部變量重名時會怎么樣?

答:同一個作用于中不能出現(xiàn)相同名稱的變量

參考代碼:

 

 
  1. class MyClass  
  2. {  
  3. int a = 10;  
  4.  
  5. public void MyMethod()  
  6. {  
  7. int a = 20; //方法內(nèi)部變量與類屬性變量 a同時出現(xiàn)時, 以當(dāng)前方法內(nèi)(作用域的變量為準(zhǔn))  
  8. Console.WriteLine("a:{0}",a); //輸出結(jié)果為20  
  9.  
  10. int a = 30; // 編譯錯誤,同一個作用域內(nèi)不可以出現(xiàn)相同名稱的變量  
  11. }  

三、數(shù)據(jù)類型默認(rèn)值與初始化

C#中類定義屬性可以不用初始化,那么他們的值分別是什么呢? 未賦值的變量會被自動賦予一個合適的默認(rèn)值。

例如:

int 類型(數(shù)值類型)默認(rèn)值為0 bool 類型 默認(rèn)值為false char 類型 默認(rèn)值為 ‘/0'

我們還可以在定義類屬性是就初始化他們的值,也可以通過類的構(gòu)造函數(shù)來初始化類屬性

 

 
  1. class MyClass  
  2. {  
  3. public int a = 10; //第一種初始化方法在定義是就賦值  
  4. public bool b; //默認(rèn)值為false  
  5. public MyClass(bool c)  
  6. {  
  7. b = c; //通過構(gòu)造函數(shù)初始化類屬性  
  8. }  
  9. }  
  10.  
  11. class Program  
  12. {  
  13. static void Main(string[] args)  
  14. {  
  15. MyClass mc = new MyClass(true);//通過構(gòu)造函數(shù)傳入true 賦給參數(shù)bool類型變量c = true  
  16. Console.WriteLine("mc->a :{0}", mc.a.ToString());  
  17. Console.WriteLine("mc->b :{0}",mc.b.ToString());  
  18. }  

輸出結(jié)果如下:

C#編程自學(xué)之?dāng)?shù)據(jù)類型和變量一

四、靜態(tài)變量

靜態(tài)變量就是通過類級別去調(diào)用,無需創(chuàng)建類型的對象就可以用的變量。

靜態(tài)變量關(guān)鍵字: static

定義格式: [static 數(shù)據(jù)類型 變量名]

實(shí)例代碼:

 

 
  1. using System;  
  2.  
  3. namespace MyProgram  
  4. {  
  5. class MyClass  
  6. {  
  7. public int a = 10; //變量a為對象級別屬性  
  8. public static int b = 20; //變量b為類級別屬性  
  9. }  
  10.  
  11. class Program  
  12. {  
  13. static void Main(string[] args)  
  14. {  
  15. MyClass mc = new MyClass();  
  16. int a_Mc = mc.a; //變量級別需要創(chuàng)建對象MC后通過MC(對象)來訪問  
  17.  
  18. int b_MyClass = MyClass.b; //類屬性可直接通過類名訪問無需創(chuàng)建對象  
  19.  
  20. Console.WriteLine("mc->a :{0}", a_Mc);  
  21. Console.WriteLine("MyClass->b :{0}", b_MyClass);  
  22. }  
  23. }  

運(yùn)行結(jié)果如下:

C#編程自學(xué)之?dāng)?shù)據(jù)類型和變量一

五、常量

常量就是不能被改變的變量,常量只能定義在類屬性級別,常量也必須是靜態(tài)的,并且在定義時就初始化賦值,常量一旦被初始化后就不可以在改變,任何對常量改變語句都將引起編譯器錯誤。因?yàn)槌A慷x時就要賦值所以常量類型只能聲明給值類型(值類型與引用類型下篇講解)。

常量的定義格式: [const 數(shù)據(jù)類型 變量名]

代碼:

 

 
  1. using System;  
  2.  
  3. namespace MyProgram  
  4. {  
  5. class MyClass  
  6. {  
  7. public const int a = 10; //定義常量a  
  8. public const bool b = false//定義常量b  
  9. }  
  10.  
  11. class Program  
  12. {  
  13. static void Main(string[] args)  
  14. {  
  15. int a_Const_MyClass = MyClass.a; //常量必須是靜態(tài)的,通過類名訪問  
  16.  
  17. bool b_Const_MyClass = MyClass.b; //常量必須是靜態(tài)的,通過類名訪問  
  18.  
  19. Console.WriteLine("MyClass->a_Const :{0}", a_Const_MyClass.ToString());  
  20. Console.WriteLine("MyClass->b_Const :{0}", b_Const_MyClass.ToString());  
  21.  
  22. //任何試圖修改常量的動作都會引起編譯錯誤  
  23. MyClass.a = 20;  
  24. MyClass.b = true;  
  25. }  
  26. }  

正確操作運(yùn)行結(jié)果如下:

C#編程自學(xué)之?dāng)?shù)據(jù)類型和變量一

修改常量提示錯誤如下:

C#編程自學(xué)之?dāng)?shù)據(jù)類型和變量一

六、只讀與靜態(tài)只讀

回顧下常量在聲明時必須初始化賦值,那么如果我想在運(yùn)行的時候才賦值怎么辦?那么不用怕C#為我們提供了只讀類型關(guān)鍵字為:readonly ,只讀類型跟常量類似也是賦值后就不可以改變,但與常量不同的是它不是強(qiáng)制靜態(tài)的,也就是只讀類型是對象級別來訪問的。

只讀類型定義方式:[readonly 數(shù)據(jù)類型 變量名]

那么如何讓他成為靜態(tài)的? 很簡單在前面我們已經(jīng)介紹過靜態(tài)的關(guān)鍵字static

靜態(tài)只讀類型定義方式:[static readonly 數(shù)據(jù)類型 變量名]

代碼:

 

 
  1. using System;  
  2.  
  3. namespace MyProgram  
  4. {  
  5. class MyClass  
  6. {  
  7. public readonly int a = 10; //定義只讀變量a  
  8. public static readonly bool b = false//定義靜態(tài)只讀變量b  
  9. }  
  10.  
  11. class Program  
  12. {  
  13. static void Main(string[] args)  
  14. {  
  15. MyClass mc = new MyClass();  
  16. int a_ReadOnly_MC = mc.a; //只讀變量是非靜態(tài)的,由對象級別訪問  
  17.  
  18. bool b_StaticReadOnly_MyClass = MyClass.b; //靜態(tài)只讀變量是類級別變量,有類名訪問  
  19.  
  20. Console.WriteLine("a_ReadOnly_MC : {0}",a_ReadOnly_MC);  
  21. Console.WriteLine("b_StaticReadOnly_MyClass :{1}", b_StaticReadOnly_MyClass);  
  22.  
  23. //任何對只讀類型的修改都將引起編譯錯誤  
  24. mc.a = 20;  
  25. MyClass.b = true;  
  26. }  
  27. }  

正確操作運(yùn)行結(jié)果如下:

C#編程自學(xué)之?dāng)?shù)據(jù)類型和變量一

修改只讀變量錯誤如下:

C#編程自學(xué)之?dāng)?shù)據(jù)類型和變量一

七、需要注意的細(xì)節(jié)

1.變量作用域是否可以出現(xiàn)相同變量名?

答:相同作用域時,變量不可以重名,在當(dāng)前作用域與上級作用域的變量重名時,以變量所在作用域?yàn)橹鳌?/p>

2.常量是否可以在對象級別訪問?

答:常量不可以在對象級別訪問,常量默認(rèn)為靜態(tài)的,由類級別訪問。

3.常量(const)與(readonly)只讀的區(qū)別?

答:相同點(diǎn):是都是賦值后就不可以改變,

不同點(diǎn):

1.Const 必須在聲明時就賦值,readonly 可以在初始化過程中賦值.

2.Const只可以修飾值類型,而readonly可以修飾任意類型.

3.Const是類級別訪問,readonly是對象級別訪問

以上講解的類的屬性都代表成員變量,希望對大家的學(xué)習(xí)有所幫助。之后還有相關(guān)文章繼續(xù)更新,希望大家繼續(xù)關(guān)注。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 弥勒县| 额尔古纳市| 拜城县| 漳浦县| 兴义市| 临西县| 新巴尔虎右旗| 潞西市| 新密市| 诸暨市| 平安县| 安图县| 大埔县| 宣城市| 格尔木市| 柘城县| 双桥区| 岢岚县| 诸城市| 永顺县| 星子县| 宁陵县| 黄山市| 乐亭县| 抚松县| 阿勒泰市| 阳江市| 壶关县| 定西市| 湘乡市| 兖州市| 通州市| 绥江县| 搜索| 婺源县| 玉溪市| 江口县| 汝南县| 兴业县| 安溪县| 集贤县|