激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

香港云服务器
服務器之家 - 編程語言 - ASP.NET教程 - .NET 中的裝箱與拆箱實現過程

.NET 中的裝箱與拆箱實現過程

2019-10-15 10:57asp.net教程網 ASP.NET教程

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

先看下面的代碼: 

復制代碼代碼如下:

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


編譯時可以通過,但運行時卻報如下錯誤: 
System.InvalidCastException: 指定的轉換無效。 

這是因為,當對一個對象進行拆箱時,轉型的結果必須是它原來未裝箱的類型。此處必須先轉換為int類型,才能再轉換為double類型。其正確格式如下: 

復制代碼代碼如下:

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


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

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

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

延伸 · 閱讀

精彩推薦
456
主站蜘蛛池模板: 毛片在线免费观看视频 | 多人乱大交xxxxx变态 | 日本高清视频网站www | 欧美精品成人一区二区在线观看 | 毛片视频网址 | 又黄又爽免费无遮挡在线观看 | 毛片视频播放 | 国产精品一区二区x88av | 在线a亚洲视频播放在线观看 | www久久久久久 | 久久骚 | 久久久日韩av免费观看下载 | 亚洲一区二区不卡视频 | 视频一区二区在线播放 | 国产二区三区四区 | asiass极品裸体女pics | 日本高清黄色片 | 久草在线免费看 | 欧美精品亚洲人成在线观看 | xxxxhd18hd日本hd | 国产成人高清在线观看 | 久久不雅视频 | 一级电影在线免费观看 | 久久羞羞视频 | 日本欧美一区二区三区在线播 | 国产亚洲精品成人 | 亚洲va久久久噜噜噜久牛牛影视 | 成人三级黄色片 | chengrenzaixian | 成人短视频在线观看免费 | 欧美不卡三区 | 午夜国产小视频 | 国产一区二区三区在线免费观看 | 国产亚洲高清在线精品不卡 | 91美女视频在线观看 | 日本欧美中文字幕 | 九九色网站 | 亚洲性夜色噜噜噜7777 | 精品小视频 | 色妞欧美 | 中文字幕专区高清在线观看 |