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

首頁 > 編程 > C# > 正文

C#編程自學之數(shù)據(jù)類型和變量三

2020-01-24 01:25:55
字體:
來源:轉載
供稿:網(wǎng)友

了解了數(shù)據(jù)類型與變量的基本概念之后,我們來討論數(shù)據(jù)類型的轉換與裝箱與拆箱!裝箱和取消裝箱使我們能夠統(tǒng)一地來考察類型系統(tǒng),其中任何類型的值最終都可以按對象處理。
一、數(shù)據(jù)類型轉換
在編程時 我們有時候會遇到將一個類型的變量轉換成另一種數(shù)據(jù)類型,我們稱它為數(shù)據(jù)類型的轉換,C#數(shù)據(jù)類型的轉換有兩種方式如下:
1.默認安全的數(shù)據(jù)類型轉換
默認安全的數(shù)據(jù)類型轉換:我們稱之為 隱式的數(shù)據(jù)類型轉換,什么是隱式的數(shù)據(jù)類型轉換?隱式的數(shù)據(jù)類型轉換就是數(shù)據(jù)類型的低范圍(參考C#數(shù)據(jù)類型與變量一中的數(shù)據(jù)類型的范圍)向高范圍的數(shù)據(jù)類型的轉換。例如:

int a = 200; //int 范圍是 -2147483648~2147483647 long b = a; //long 范圍是 -9223372036854775808~9223372036854775807 表示的整數(shù)范圍更大 并且這個范圍包含200//所以我們認為這兩個數(shù)據(jù)類型轉換是默認合法的也稱隱式數(shù)據(jù)類型轉換Console.WriteLine("b = "+b.ToString());

運行結果當時會輸出:“b = 200”這段話啦!

2.強制的數(shù)據(jù)類型轉換
了解隱式數(shù)據(jù)類型的轉換后,我們在來了解下強制的類型轉換,強制類型轉換就是,當不滿足隱式數(shù)據(jù)類型轉換的規(guī)則時,的一種數(shù)據(jù)類型轉換的方法,強制數(shù)據(jù)類型轉換必然會引發(fā)一些錯誤,例如:
將高范圍數(shù)據(jù)類型(簡稱高)轉換低范圍數(shù)據(jù)類型(簡稱低)時,那么當“高”變量的值,超出了“低”數(shù)據(jù)類型的范圍時,我們簡稱數(shù)據(jù)類型溢出。代碼如下:

long a = 3333333333; //long 范圍是 -9223372036854775808~9223372036854775807 ->3333333333在這個范圍中合法int b = (int)a; //int 范圍是 -2147483648~2147483647 -> 3333333333 超出了這個范圍 所以導致數(shù)據(jù)類型溢出Console.WriteLine("a =" + a.ToString());Console.WriteLine("b ="+b.ToString());//類型溢出這里會輸出一個非常大的負數(shù)

輸出結果如下:

二、裝箱與拆箱
理解完基本數(shù)據(jù)類型的轉換后我們來看一下值類型與引用類型之間的轉換,我們稱為裝箱與拆箱。
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{  //將參數(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);  }}

這樣我們將來不管需要擴展多少數(shù)據(jù)類型我們這個方法都可以滿足。
裝箱用于在垃圾回收堆中存儲值類型。裝箱是值類型到 object 類型或到此值類型所實現(xiàn)的任何接口類型的隱式轉換。對值類型裝箱會在堆中分配一個對象實例,并將該值復制到新的對象中。
關于C#數(shù)據(jù)類型與變量就介紹到這,希望上面三篇文章對大家的學習有所幫助。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 增城市| 西林县| 平陆县| 吴堡县| 彩票| 临邑县| 西乌| 依安县| 红安县| 且末县| 柳林县| 临江市| 福安市| 梅州市| 东阿县| 公安县| 即墨市| 中西区| 湾仔区| 来宾市| 慈利县| 连城县| 宜川县| 汾阳市| 襄汾县| 舟山市| 正安县| 玉林市| 景德镇市| 桐城市| 廉江市| 河源市| 江都市| 张北县| 开鲁县| 南澳县| 镇江市| 灌云县| 平邑县| 德兴市| 新龙县|