最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2013年01月10日 12:02:01   作者:  
本文分別介紹裝箱(boxing)與拆箱(unboxing)的實(shí)現(xiàn)過程,感興趣的朋友可以了解下

先看下面的代碼:

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

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

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

這是因?yàn)?,?dāng)對(duì)一個(gè)對(duì)象進(jìn)行拆箱時(shí),轉(zhuǎn)型的結(jié)果必須是它原來未裝箱的類型。此處必須先轉(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)過程則如下
1.如果要拆箱的對(duì)象為null,將會(huì)拋出一個(gè)NullReferenceException異常。
2.如果該引用指向的對(duì)象不是一個(gè)期望的值類型的已裝箱對(duì)象,則拆箱失敗,并拋出一個(gè)InvalidCastException異常(如本文剛開始的部分)。
3.一個(gè)指向包含在已經(jīng)裝箱對(duì)象中值類型部分的指針被返回。該指針指向的值類型對(duì)于引用類型對(duì)象通常所具有的附加成員(即一個(gè)方法表指針和一個(gè)SyncBlockIndex)一無所知。實(shí)際上,該指針指向的是已經(jīng)裝箱對(duì)象中的未裝箱部分(Microsoft.NET 框架程序設(shè)計(jì)<修訂版>)。

對(duì)于第3點(diǎn),可以使用上面的例子來幫助理解。首先定義值類型變量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類型。

相關(guān)文章

  • .NET CORE3.1實(shí)現(xiàn)微信小程序發(fā)送訂閱消息

    .NET CORE3.1實(shí)現(xiàn)微信小程序發(fā)送訂閱消息

    這篇文章主要介紹了.NET CORE3.1實(shí)現(xiàn)微信小程序發(fā)送訂閱消息,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Asp.net中使用PageDataSource分頁實(shí)現(xiàn)代碼

    Asp.net中使用PageDataSource分頁實(shí)現(xiàn)代碼

    這篇文章主要介紹asp.net中使用PageDataSource分頁的方法,需要的朋友可以參考下
    2013-04-04
  • asp.net如何在圖片上加水印文字具體實(shí)現(xiàn)

    asp.net如何在圖片上加水印文字具體實(shí)現(xiàn)

    這篇文章主要介紹了asp.net如何在圖片上加水印文字具體實(shí)現(xiàn),有需要的朋友可以參考一下
    2013-12-12
  • 運(yùn)用.NetCore實(shí)例講解RabbitMQ死信隊(duì)列,延時(shí)隊(duì)列

    運(yùn)用.NetCore實(shí)例講解RabbitMQ死信隊(duì)列,延時(shí)隊(duì)列

    這篇文章主要運(yùn)用.NetCore實(shí)例講解RabbitMQ死信隊(duì)列,延時(shí)隊(duì)列,,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-09-09
  • asp.net(c#)ref,out ,params的區(qū)別

    asp.net(c#)ref,out ,params的區(qū)別

    C#中有三個(gè)關(guān)鍵字-ref,out ,params,雖然本人不喜歡這三個(gè)關(guān)鍵字,因?yàn)樗鼈円伤破茐拿嫦驅(qū)ο筇匦?。但是既然m$把融入在c#體系中,那么我們就來認(rèn)識(shí)一下參數(shù)修飾符ref,out ,params吧,還有它們的區(qū)別。
    2009-12-12
  • asp.net 導(dǎo)出到CSV文件亂碼的問題

    asp.net 導(dǎo)出到CSV文件亂碼的問題

    導(dǎo)出到CSV文件亂碼的問題,需要的朋友可以參考下。
    2010-03-03
  • .Net插件框架Managed Extensibility Framework簡介

    .Net插件框架Managed Extensibility Framework簡介

    這篇文章介紹了.Net插件框架Managed Extensibility Framework,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • .NET連接池的問題詳解

    .NET連接池的問題詳解

    這篇文章主要介紹了.NET連接池的問題詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • ASP.NET驗(yàn)證碼(3種)

    ASP.NET驗(yàn)證碼(3種)

    這篇文章主要對(duì)ASP.NET實(shí)現(xiàn)三種驗(yàn)證碼的簡單實(shí)例進(jìn)行了介紹,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2015-08-08
  • asp.net頁面SqlCacheDependency緩存實(shí)例

    asp.net頁面SqlCacheDependency緩存實(shí)例

    這篇文章主要介紹了asp.net頁面SqlCacheDependency緩存實(shí)例,以一個(gè)完整實(shí)例來展現(xiàn)asp.net中緩存技術(shù)的使用方法,需要的朋友可以參考下
    2014-08-08

最新評(píng)論

贵州省| 奇台县| 鹤庆县| 枣庄市| 慈溪市| 西峡县| 东方市| 伊吾县| 亚东县| 龙口市| 岢岚县| 攀枝花市| 浦北县| 平罗县| 沅陵县| 丰城市| 华安县| 荆州市| 南靖县| 濮阳市| 重庆市| 武冈市| 杭锦旗| 灵寿县| 安泽县| 衢州市| 济源市| 梁山县| 阿拉尔市| 汕尾市| 铁力市| 巫山县| 昭苏县| 治多县| 碌曲县| 高邑县| 华池县| 泾川县| 贞丰县| 嵊泗县| 奎屯市|