成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

C#裝箱和拆箱是什么

這篇文章主要講解了“C#裝箱和拆箱是什么”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“C#裝箱和拆箱是什么”吧!

創(chuàng)新互聯(lián)主營西安網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,APP應(yīng)用開發(fā),西安h5小程序設(shè)計(jì)搭建,西安網(wǎng)站營銷推廣歡迎西安等地區(qū)企業(yè)咨詢

裝箱:將值類型轉(zhuǎn)換為引用類型。
拆箱:將引用類型轉(zhuǎn)換為值類型。
值類型是一種相對輕型的類型,不像對象那樣在托管堆中分配,也不會被GC,不通過指針來引用,不過在有些時(shí)候需要獲取對值類型的引用,例如在使用net1.0的集合類ArrayList的時(shí)候。

class Program  {  static void Main(string[] args)  {  ArrayList list = new ArrayList();  Point p;//因Point為值類型,分配在堆棧中  for (int i = 0; i < 100; i++)  {  pp.x = p.y = i;  //初始化Point中的成員  list.Add(p);//對p進(jìn)行裝箱后,將引用添加到list中  }  }  }  struct  Point  {  public Int32 x;  public Int32 y;  }ArrayList的Add方法是接受一個(gè)Object參數(shù),如下   public virtual int Add(object value);

所以在執(zhí)行Add方法時(shí)會將Point值類型轉(zhuǎn)換為一個(gè)堆得托管對象,并獲取到這個(gè)對象的引用,將引用地址存儲在ArrayList中。


在一個(gè)值類型裝箱的時(shí)候內(nèi)部發(fā)生的事情:
l 在托管堆分配好內(nèi)存。分配的內(nèi)存是值類型的各個(gè)字段所需內(nèi)存量加上托管堆上的兩個(gè)額外成員(類型對象指針和同步索引塊)所需的內(nèi)存量。
l 值類型中的字段值復(fù)制到新分配的堆內(nèi)存中。
l 返回對象的引用地址。


拆箱就是執(zhí)行和裝箱相反的操作,將引用類型轉(zhuǎn)化為值類型。接上面的代碼,獲取ArrayList中的元素值用如下代碼:

for (int j = 0; j < 10; j++)  {   Point point =(Point)list[j];  Console.WriteLine("X:" + point.x + " Y:" + point.y);  }


上面的代碼中通過索引取到ArrayList中存儲的各個(gè)Point的引用地址,通過Point類型轉(zhuǎn)換將其對應(yīng)的值從堆中復(fù)制到Point的實(shí)例point中,這個(gè)轉(zhuǎn)換的過程就是拆箱的過程。

在拆箱的過程中要注意以下兩點(diǎn):
1. 如果對已裝箱的值類型的引用的變量為null,會引發(fā)NullRefreenceException異常
2. 如果一個(gè)引用指向的對象在拆箱時(shí)不是用的裝箱時(shí)所使用的類型,將會引發(fā)InvalidCastException異常。代碼如下:

static void Main(string[] args)  {  Int32 x = 5;  Object o = x;  Int16 y = (Int16)o;//引發(fā)InvalidCastException異常  }

正確的做法是,現(xiàn)將其用Int32類型來拆箱,然后再強(qiáng)制轉(zhuǎn)換為Int16

static void Main(string[] args)  {  Int32 x = 5;  Object o = x;  Int16 y = (Int16)(Int32)o;  }

下面來看兩段程序來深入理解下裝箱和拆箱

代碼一:

static void Main(string[] args)  {  Int32 x = 5;  Object o = x;  x = 123;  Console.WriteLine(x + ",  " + (Int32)o);  }

感謝各位的閱讀,以上就是“C#裝箱和拆箱是什么”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對C#裝箱和拆箱是什么這一問題有了更深刻的體會,具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!

網(wǎng)頁標(biāo)題:C#裝箱和拆箱是什么
文章源于:http://jinyejixie.com/article48/ipeghp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、網(wǎng)頁設(shè)計(jì)公司ChatGPT、網(wǎng)站收錄網(wǎng)站設(shè)計(jì)公司、電子商務(wù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司
井陉县| 宁化县| 嘉定区| 长泰县| 雷山县| 息烽县| 开远市| 和田县| 嘉善县| 丹阳市| 顺昌县| 吕梁市| 巩留县| 六枝特区| 麦盖提县| 漯河市| 曲阜市| 图片| 泸水县| 沾化县| 界首市| 海淀区| 将乐县| 涟源市| 边坝县| 高尔夫| 东宁县| 蓝山县| 孟村| 绥棱县| 潍坊市| 绍兴县| 砚山县| 河池市| 子长县| 马龙县| 廉江市| 龙州县| 宁化县| 洪洞县| 元氏县|