婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > .NET 中的裝箱與拆箱實現(xiàn)過程

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

熱門標簽:玉林市機器人外呼系統(tǒng)哪家好 同安公安400電話怎么申請流程 南陽外呼系統(tǒng)定制化 申請400電話手續(xù) 蘋果手機凱立德地圖標注 預測式外呼系統(tǒng)使用說明 百度ai地圖標注 電話機器人軟件銷售工作 合肥電銷外呼系統(tǒng)哪家公司做的好

先看下面的代碼:

復制代碼 代碼如下:

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.一個指向包含在已經(jīng)裝箱對象中值類型部分的指針被返回。該指針指向的值類型對于引用類型對象通常所具有的附加成員(即一個方法表指針和一個SyncBlockIndex)一無所知。實際上,該指針指向的是已經(jīng)裝箱對象中的未裝箱部分(Microsoft.NET 框架程序設計修訂版>)。

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

您可能感興趣的文章:
  • Java中的裝箱和拆箱深入理解
  • 淺談Java自動裝箱與拆箱及其陷阱
  • java自動裝箱拆箱深入剖析
  • 再議C#中的裝箱與拆箱的問題詳解
  • 解析C#中的裝箱與拆箱的詳解
  • C#實現(xiàn)裝箱與拆箱操作簡單實例
  • c#裝箱和拆箱知識整理
  • C#裝箱和拆箱原理詳解
  • 輕松學習C#的裝箱與拆箱
  • Java拆裝箱深度剖析

標簽:海南 南京 揚州 淄博 南京 臺州 南昌 嘉興

巨人網(wǎng)絡通訊聲明:本文標題《.NET 中的裝箱與拆箱實現(xiàn)過程》,本文關鍵詞  .NET,中的,裝箱,與,拆箱,;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《.NET 中的裝箱與拆箱實現(xiàn)過程》相關的同類信息!
  • 本頁收集關于.NET 中的裝箱與拆箱實現(xiàn)過程的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 高密市| 乌兰察布市| 德惠市| 汉寿县| 库伦旗| 京山县| 惠州市| 威信县| 汤原县| 大田县| 江阴市| 随州市| 凤城市| 宿州市| 合川市| 云安县| 新干县| 盐津县| 二连浩特市| 淮阳县| 阿克苏市| 高淳县| 汶上县| 泗阳县| 曲沃县| 如东县| 扬州市| 安阳县| 连南| 象州县| 开远市| 喀喇沁旗| 沙田区| 彝良县| 溧阳市| 化德县| 丰镇市| 枣阳市| 库尔勒市| 安陆市| 宣汉县|