a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C# > 正文

解析C#中的裝箱與拆箱的詳解

2020-01-24 03:18:36
字體:
供稿:網(wǎng)友
裝箱和拆箱是值類型和引用類型之間相互轉(zhuǎn)換是要執(zhí)行的操作。
1. 裝箱在值類型向引用類型轉(zhuǎn)換時(shí)發(fā)生
2. 拆箱在引用類型向值類型轉(zhuǎn)換時(shí)發(fā)生
光上述兩句話不難理解,但是往深處了解,就需要一些篇幅來解釋了。
我們先看裝箱時(shí)都會(huì)發(fā)生什么事情,下面是一行最簡(jiǎn)單的裝箱代碼
復(fù)制代碼 代碼如下:

object obj = 1;

這行語句將整型常量1賦給object類型的變量obj; 眾所周知常量1是值類型,值類型是要放在棧上的,而object是引用類型,它需要放在堆上;要把值類型放在堆上就需要執(zhí)行一次裝箱操作。
這行語句的IL代碼如下,請(qǐng)注意注釋部分說明:
復(fù)制代碼 代碼如下:

.locals init (
  [0] object objValue
)  //以上三行IL表示聲明object類型的名稱為objValue的局部變量
IL_0000: nop
IL_0001: ldc.i4.s 9 //表示將整型數(shù)9放到棧頂
IL_0003: box [mscorlib]System.Int32 //執(zhí)行IL box指令,在內(nèi)存堆中申請(qǐng)System.Int32類型需要的堆空間
IL_0008: stloc.0 //彈出堆棧上的變量,將它存儲(chǔ)到索引為0的局部變量中

以上就是裝箱所要執(zhí)行的操作了,執(zhí)行裝箱操作時(shí)不可避免的要在堆上申請(qǐng)內(nèi)存空間,并將堆棧上的值類型數(shù)據(jù)復(fù)制到申請(qǐng)的堆內(nèi)存空間上,這肯定是要消耗內(nèi)存和cpu資源的。我們?cè)倏聪虏鹣洳僮魇窃趺椿厥拢?BR>請(qǐng)看下面的C#代碼:
復(fù)制代碼 代碼如下:

object objValue = 4;
int value = (int)objValue;

上面的兩行代碼會(huì)執(zhí)行一次裝箱操作將整形數(shù)字常量4裝箱成引用類型object變量objValue;然后又執(zhí)行一次拆箱操作,將存儲(chǔ)到堆上的引用變量objValue存儲(chǔ)到局部整形值類型變量value中。
同樣我們需要看下IL代碼:
復(fù)制代碼 代碼如下:

.locals init (
  [0] object objValue,
  [1] int32 'value'
) //上面IL聲明兩個(gè)局部變量object類型的objValue和int32類型的value變量
IL_0000: nop
IL_0001: ldc.i4.4 //將整型數(shù)字4壓入棧
IL_0002: box [mscorlib]System.Int32  //執(zhí)行IL box指令,在內(nèi)存堆中申請(qǐng)System.Int32類型需要的堆空間
IL_0007: stloc.0 //彈出堆棧上的變量,將它存儲(chǔ)到索引為0的局部變量中
IL_0008: ldloc.0//將索引為0的局部變量(即objValue變量)壓入棧
IL_0009: unbox.any [mscorlib]System.Int32 //執(zhí)行IL 拆箱指令unbox.any 將引用類型object轉(zhuǎn)換成System.Int32類型
IL_000e: stloc.1 //將棧上的數(shù)據(jù)存儲(chǔ)到索引為1的局部變量即value

拆箱操作的執(zhí)行過程和裝箱操作過程正好相反,是將存儲(chǔ)在堆上的引用類型值轉(zhuǎn)換為值類型并給值類型變量。
裝箱操作和拆箱操作是要額外耗費(fèi)cpu和內(nèi)存資源的,所以在c# 2.0之后引入了泛型來減少裝箱操作和拆箱操作消耗。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 成人深夜视频 | 一级毛片视频播放 | 国产伦精品一区二区三区高清 | 成人精品视频99在线观看免费 | 国产精品一码二码三码在线 | t66y最新地址一地址二69 | 欧美字幕一区 | 久久久精彩视频 | 国产成人在线免费看 | 亚洲精品一区久久久久久 | 久久高清 | 国产精品视频一区二区免费不卡 | 国产伦精品一区二区三区在线 | 国产成人福利视频 | 国产中文在线 | 久久久久久国产精品美女 | 久久久久久免费毛片精品 | 日一日干一干 | 精品一区二区三区在线视频 | 成人久久18免费观看 | 中文字幕亚洲一区二区三区 | 久久国产麻豆 | 国产高清自拍 | 欧美啊v | 久久成人免费视频 | 五月激情六月综合 | 最新日韩在线观看视频 | 国产日韩欧美精品一区二区 | 国产在线精品成人免费怡红院 | 韩国一区二区视频 | 亚洲精品电影 | 久久不射电影网 | 欧美日一区二区 | 久久久久久国产免费视网址 | 欧美视频区 | 91人人射| 中文字幕在线一区观看 | 亚洲国产成人在线 | 成人在线中文字幕 | 五月天婷婷综合 | 日韩在线观看毛片 |