C#編程自學(xué)之?dāng)?shù)據(jù)類型和變量三
了解了數(shù)據(jù)類型與變量的基本概念之后,我們來討論數(shù)據(jù)類型的轉(zhuǎn)換與裝箱與拆箱!裝箱和取消裝箱使我們能夠統(tǒng)一地來考察類型系統(tǒng),其中任何類型的值最終都可以按對象處理。
一、數(shù)據(jù)類型轉(zhuǎn)換
在編程時(shí) 我們有時(shí)候會(huì)遇到將一個(gè)類型的變量轉(zhuǎn)換成另一種數(shù)據(jù)類型,我們稱它為數(shù)據(jù)類型的轉(zhuǎn)換,C#數(shù)據(jù)類型的轉(zhuǎn)換有兩種方式如下:
1.默認(rèn)安全的數(shù)據(jù)類型轉(zhuǎn)換
默認(rèn)安全的數(shù)據(jù)類型轉(zhuǎn)換:我們稱之為 隱式的數(shù)據(jù)類型轉(zhuǎn)換,什么是隱式的數(shù)據(jù)類型轉(zhuǎn)換?隱式的數(shù)據(jù)類型轉(zhuǎn)換就是數(shù)據(jù)類型的低范圍(參考C#數(shù)據(jù)類型與變量一中的數(shù)據(jù)類型的范圍)向高范圍的數(shù)據(jù)類型的轉(zhuǎn)換。例如:
int a = 200; //int 范圍是 -2147483648~2147483647 long b = a; //long 范圍是 -9223372036854775808~9223372036854775807 表示的整數(shù)范圍更大 并且這個(gè)范圍包含200 //所以我們認(rèn)為這兩個(gè)數(shù)據(jù)類型轉(zhuǎn)換是默認(rèn)合法的也稱隱式數(shù)據(jù)類型轉(zhuǎn)換 Console.WriteLine("b = "+b.ToString());
運(yùn)行結(jié)果當(dāng)時(shí)會(huì)輸出:“b = 200”這段話啦!
2.強(qiáng)制的數(shù)據(jù)類型轉(zhuǎn)換
了解隱式數(shù)據(jù)類型的轉(zhuǎn)換后,我們在來了解下強(qiáng)制的類型轉(zhuǎn)換,強(qiáng)制類型轉(zhuǎn)換就是,當(dāng)不滿足隱式數(shù)據(jù)類型轉(zhuǎn)換的規(guī)則時(shí),的一種數(shù)據(jù)類型轉(zhuǎn)換的方法,強(qiáng)制數(shù)據(jù)類型轉(zhuǎn)換必然會(huì)引發(fā)一些錯(cuò)誤,例如:
將高范圍數(shù)據(jù)類型(簡稱高)轉(zhuǎn)換低范圍數(shù)據(jù)類型(簡稱低)時(shí),那么當(dāng)“高”變量的值,超出了“低”數(shù)據(jù)類型的范圍時(shí),我們簡稱數(shù)據(jù)類型溢出。代碼如下:
long a = 3333333333; //long 范圍是 -9223372036854775808~9223372036854775807 ->3333333333在這個(gè)范圍中合法 int b = (int)a; //int 范圍是 -2147483648~2147483647 -> 3333333333 超出了這個(gè)范圍 所以導(dǎo)致數(shù)據(jù)類型溢出 Console.WriteLine("a =" + a.ToString()); Console.WriteLine("b ="+b.ToString());//類型溢出這里會(huì)輸出一個(gè)非常大的負(fù)數(shù)
輸出結(jié)果如下:
二、裝箱與拆箱
理解完基本數(shù)據(jù)類型的轉(zhuǎn)換后我們來看一下值類型與引用類型之間的轉(zhuǎn)換,我們稱為裝箱與拆箱。
1.裝箱
裝箱就將值類型轉(zhuǎn)換成引用類型:
int a = 10; object obj = a; //將值類型轉(zhuǎn)換引用類型,裝箱操作
在裝箱操作時(shí),運(yùn)行時(shí)會(huì)在托管堆上分配一個(gè)空間,存放a 中的10,并標(biāo)志這塊空間的裝箱類型是int。
如圖:
2.拆箱
那拆箱就跟裝箱相反,就是將引用類型還原會(huì)值類型。
int a = 10; object obj = a; //將值類型轉(zhuǎn)換引用類型 裝箱 int b = (int)obj; //將引用類型轉(zhuǎn)換為值類型 拆箱
當(dāng)拆箱時(shí)我們會(huì)將推中的10強(qiáng)制類型轉(zhuǎn)換放到??臻g中(圖中代表int b)。
如圖
3.裝箱與拆箱的作用
當(dāng)我需要顯示的方法,分別來顯示 int float double類型的值到控制臺(tái)。一般我們的設(shè)計(jì)方法如下:
class MyProgram { //用來打印int類型的值 public static void ShowInt(int a) { Console.WriteLine(" a ="+a.ToString()); } //用來打印float類型的值 public static void ShowFloat(float a) { Console.WriteLine(" a ="+a.ToString()); } //用來打印double類型的值 public static void ShowDouble(double a) { Console.WriteLine(" a ="+a.ToString()); } static void Main(string[] args) { int a = 10; ShowInt(a); float b = 2.2; ShowFloat(b); double c = 2.22; ShowDouble(c); } }
那么我們思考一下,這個(gè)時(shí)候我需要在支持 string , short,char等等的類型顯示的時(shí)候,我們是不是需要對每一個(gè)類型都定義一個(gè)顯示的方法? 此時(shí)我們在看看引入了裝箱與拆箱概念的方法設(shè)計(jì):
class MyProgram { //將參數(shù)類型改為object public static void ShowObject(object obj) { Console.WriteLine("obj ="+obj.ToString()); } static void Main(string[] args) { int a = 10; ShowObject(a); //int a 被裝箱 float b = 2.2;//float b 被裝箱 ShowObject(b); double c = 2.22;//double c 被裝箱 ShowObject(c); } }
這樣我們將來不管需要擴(kuò)展多少數(shù)據(jù)類型我們這個(gè)方法都可以滿足。
裝箱用于在垃圾回收堆中存儲(chǔ)值類型。裝箱是值類型到 object 類型或到此值類型所實(shí)現(xiàn)的任何接口類型的隱式轉(zhuǎn)換。對值類型裝箱會(huì)在堆中分配一個(gè)對象實(shí)例,并將該值復(fù)制到新的對象中。
關(guān)于C#數(shù)據(jù)類型與變量就介紹到這,希望上面三篇文章對大家的學(xué)習(xí)有所幫助。
上一篇:C#編程自學(xué)之運(yùn)算符和表達(dá)式
欄 目:C#教程
下一篇:C#編程自學(xué)之開篇介紹
本文標(biāo)題:C#編程自學(xué)之?dāng)?shù)據(jù)類型和變量三
本文地址:http://mengdiqiu.com.cn/a1/C_jiaocheng/6928.html
您可能感興趣的文章
- 01-10C#自定義簽名章實(shí)現(xiàn)方法
- 01-10WinForm實(shí)現(xiàn)自定義右下角提示效果的方法
- 01-10C#實(shí)現(xiàn)自定義windows系統(tǒng)日志的方法
- 01-10C#自定義事件監(jiān)聽實(shí)現(xiàn)方法
- 01-10C#編程實(shí)現(xiàn)自定義熱鍵的方法
- 01-10WinForm實(shí)現(xiàn)程序一段時(shí)間不運(yùn)行自動(dòng)關(guān)閉的方法
- 01-10C#編程獲取資源文件中圖片的方法
- 01-10C#.NET實(shí)現(xiàn)網(wǎng)頁自動(dòng)登錄的方法
- 01-10C#編程自學(xué)之?dāng)?shù)據(jù)類型和變量二
- 01-10C#編程自學(xué)之開篇介紹


閱讀排行
本欄相關(guān)
- 01-10C#通過反射獲取當(dāng)前工程中所有窗體并
- 01-10關(guān)于ASP網(wǎng)頁無法打開的解決方案
- 01-10WinForm限制窗體不能移到屏幕外的方法
- 01-10WinForm繪制圓角的方法
- 01-10C#實(shí)現(xiàn)txt定位指定行完整實(shí)例
- 01-10WinForm實(shí)現(xiàn)仿視頻 器左下角滾動(dòng)新
- 01-10C#停止線程的方法
- 01-10C#實(shí)現(xiàn)清空回收站的方法
- 01-10C#通過重寫Panel改變邊框顏色與寬度的
- 01-10C#實(shí)現(xiàn)讀取注冊表監(jiān)控當(dāng)前操作系統(tǒng)已
隨機(jī)閱讀
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 04-02jquery與jsp,用jquery
- 01-10使用C語言求解撲克牌的順子及n個(gè)骰子
- 01-11ajax實(shí)現(xiàn)頁面的局部加載
- 08-05織夢dedecms什么時(shí)候用欄目交叉功能?
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10C#中split用法實(shí)例總結(jié)
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-10delphi制作wav文件的方法