一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - ASP.NET教程 - .NET 中的裝箱與拆箱實(shí)現(xiàn)過(guò)程

.NET 中的裝箱與拆箱實(shí)現(xiàn)過(guò)程

2019-10-15 10:57asp.net教程網(wǎng) ASP.NET教程

本文分別介紹裝箱(boxing)與拆箱(unboxing)的實(shí)現(xiàn)過(guò)程,感興趣的朋友可以了解下

先看下面的代碼: 

復(fù)制代碼代碼如下:

int tempi = 1; 
object o = tempi; 
double tempd = (double) o; 


編譯時(shí)可以通過(guò),但運(yùn)行時(shí)卻報(bào)如下錯(cuò)誤: 
System.InvalidCastException: 指定的轉(zhuǎn)換無(wú)效。 

這是因?yàn)椋?dāng)對(duì)一個(gè)對(duì)象進(jìn)行拆箱時(shí),轉(zhuǎn)型的結(jié)果必須是它原來(lái)未裝箱的類型。此處必須先轉(zhuǎn)換為int類型,才能再轉(zhuǎn)換為double類型。其正確格式如下: 

復(fù)制代碼代碼如下:

int tempi = 32; 
object o = tempi; 
double tempd = (double)(int) o; 


在.NET框架中,裝箱(boxing)通常由以下三步組成: 
1.從托管堆中為新生成的引用類型對(duì)象分配內(nèi)存。分配的內(nèi)存大小為被裝箱的值類型實(shí)例本身的大小,再加上為新生成的引用類型添加的一個(gè)方法表指針和一個(gè)SyncBlockIndex。 
2.將值類型實(shí)例的字段拷貝到托管堆上新分配對(duì)象的內(nèi)存中。 
3.返回托管堆中新分配對(duì)象的地址。這樣值類型實(shí)例也變成了一個(gè)引用類型對(duì)象。 

而拆箱(unboxing)過(guò)程則如下: 
1.如果要拆箱的對(duì)象為null,將會(huì)拋出一個(gè)NullReferenceException異常。 
2.如果該引用指向的對(duì)象不是一個(gè)期望的值類型的已裝箱對(duì)象,則拆箱失敗,并拋出一個(gè)InvalidCastException異常(如本文剛開(kāi)始的部分)。 
3.一個(gè)指向包含在已經(jīng)裝箱對(duì)象中值類型部分的指針被返回。該指針指向的值類型對(duì)于引用類型對(duì)象通常所具有的附加成員(即一個(gè)方法表指針和一個(gè)SyncBlockIndex)一無(wú)所知。實(shí)際上,該指針指向的是已經(jīng)裝箱對(duì)象中的未裝箱部分(Microsoft.NET 框架程序設(shè)計(jì)<修訂版>)。

對(duì)于第3點(diǎn),可以使用上面的例子來(lái)幫助理解。首先定義值類型變量tempi,它在內(nèi)存中占用4個(gè)字節(jié),裝箱之后,其變成引用對(duì)象的同時(shí),增加了一個(gè)方法表指針和一個(gè)SyncBlockIndex。對(duì)于引用類型而言,只需要傳一個(gè)“引用類型”的地址,就可以得到其值、方法表指針和SyncBlockIndex。在拆箱時(shí),傳遞的是其“值”的地址(未裝箱的部分),即一個(gè)“int(Int32)類型”的地址(引用),它只允許讀4個(gè)字節(jié)。而double類型是8個(gè)字節(jié),因此隱式的轉(zhuǎn)換是會(huì)報(bào)錯(cuò)的,需要先將其轉(zhuǎn)換成int類型后,才能再轉(zhuǎn)換為double類型。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 性xxx欧美| 欧美久久综合网 | 亚洲精品国产一区二区在线 | 本站只有精品 | 岛国免费大片 | 日本高清有码视频 | 亚洲国产一区二区三区a毛片 | 亚洲免费在线观看视频 | 欧美久久久久久久一区二区三区 | 忘忧草在线社区WWW日本直播 | 亚洲精品中文字幕在线 | 欧美人在线一区二区三区 | 国产在线影院 | 日韩精品亚洲专区在线影视 | 果冻传媒在线视频播放观看 | 女八把屁股扒开让男生添 | 国产亚洲一区二区三区 | 欧美撒尿屁股嘘嘘撒尿 | 国产精品露脸国语对白河北 | 人人最怕九月羊 | 亚洲国产第一区二区香蕉日日 | 大胆人gogo888体艺术在线 | 日本成年片高清在线观看 | 久久久久久久久性潮 | 日韩精品成人a在线观看 | 欧美一区二区三区久久久 | 日韩一级在线观看 | 国产综合亚洲欧美日韩一区二区 | 久久午夜一区二区 | 果冻传媒在线免费观看 | 国产成人精品一区二三区2022 | 大团圆免费阅读全文 | 日韩欧美国产免费看清风阁 | 日韩一区二区三区不卡视频 | 免费人成在线观看视频播放 | 青青热久免费精品视频精品 | 久久精品午夜一区二区福利 | 亚洲精品一区二区三区在线观看 | 亚洲好视频| 乌克兰成人性色生活片 | 欧美同性gayvidoes |