C#系列三《C#数据类型与变量三》
??? 了解了數據類型與變量的基本概念之后,我們來討論數據類型的轉換與裝箱與拆箱!
?
一 數據類型轉換
????? 在編程時 我們有時候會遇到將一個類型的變量轉換成另一種數據類型,我們稱它為數據類型的轉換,C#數據類型的轉換有兩種方式如下:
???? 1.默認安全的數據類型轉換
????? 默認安全的數據類型轉換:我們稱之為 隱式的數據類型轉換,什么是隱式的數據類型轉換?隱式的數據類型轉換就是數據類型的低范圍(參考C#數據類型與變量一中的數據類型的范圍)向高范圍的數據類型的轉換。例如:
????
1???????????? int?a?=?200;?//int?范圍是?-2147483648~2147483647?2?????????????long?b?=?a;??//long?范圍是?-9223372036854775808~9223372036854775807?表示的整數范圍更大?并且這個范圍包含200
3?????????????//所以我們認為這兩個數據類型轉換是默認合法的也稱隱式數據類型轉換
4?????????????Console.WriteLine("b?=?"+b.ToString());
?運行結果當時會輸出:“b = 200”這段話啦。。
?
???? 2.強制的數據類型轉換
????? 了解隱式數據類型的轉換后,我們在來了解下強制的類型轉換,強制類型轉換就是,當不滿足隱式數據類型轉換的規則時,的一種數據類型轉換的方法,強制數據類型轉換必然會引發一些錯誤,例如:
????? 將高范圍數據類型(簡稱高)轉換低范圍數據類型(簡稱低)時,那么當“高”變量的值,超出了“低”數據類型的范圍時,我們簡稱數據類型溢出。代碼如下:
?
1???????????? long?a?=?3333333333;?//long?范圍是?-9223372036854775808~9223372036854775807?->3333333333在這個范圍中合法2?????????????int?b?=?(int)a;??//int?范圍是?-2147483648~2147483647??->?3333333333?超出了這個范圍?所以導致數據類型溢出
3?????????????Console.WriteLine("a?="?+?a.ToString());
4?????????????Console.WriteLine("b?="+b.ToString());//類型溢出這里會輸出一個非常大的負數
輸出結果如下:
二 裝箱與拆箱
???? 理解完基本數據類型的轉換后我們來看一下值類型與引用類型之間的轉換,我們稱為裝箱與拆箱。
???? 1.裝箱
???? 裝箱就將值類型轉換成引用類型:????
int?a?=?10;object?obj?=?a;?//將值類型轉換引用類型,裝箱操作
????在裝箱操作時,運行時會在托管堆上分配一個空間,存放a 中的10,并標志這塊空間的裝箱類型是int。
??? 如圖:
?????2.拆箱
???? 那拆箱就跟裝箱相反,就是將引用類型還原會值類型。???
int?a?=?10;object?obj?=?a;?//將值類型轉換引用類型 裝箱
int?b?=?(int)obj;?//將引用類型轉換為值類型 拆箱
???? 當拆箱時我們會將推中的10強制類型轉換放到棧空間中(圖中代表int b)。
??? 如圖:
???? 3.裝箱與拆箱的作用
????? 當我需要顯示的方法,分別來顯示 int float double類型的值到控制臺。一般我們的設計方法如下:????
?
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);
????}
}
那么我們思考一下,這個時候我需要在支持 string , short,char等等的類型顯示的時候,我們是不是需要對每一個類型都定義一個顯示的方法? 此時我們在看看引入了裝箱與拆箱概念的方法設計:?
class?MyProgram{
???//將參數類型改為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);
????}
}
?
這樣我們將來不管需要擴展多少數據類型我們這個方法都可以滿足。
?
?OK 數據類型與變量部分結束。下一篇介紹一下 C#的運算符。
轉載于:https://www.cnblogs.com/doubleliang/archive/2011/05/11/2043721.html
總結
以上是生活随笔為你收集整理的C#系列三《C#数据类型与变量三》的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 特斯拉 2023 年 1 月在中国大陆新
- 下一篇: 一直开着nfc有影响吗