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

C#裝箱與拆箱操作的深入講解

 更新時間:2019年03月13日 09:01:52   作者:丑萌氣質(zhì)狗  
這篇文章主要給大家介紹了關(guān)于C#裝箱與拆箱操作的相關(guān)資料,文中通過圖文介紹的非常詳細,對大家的學(xué)習(xí)或者使用C#具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

疑問

都知道C#有裝箱和拆箱的操作,聽聞也都是講int類型轉(zhuǎn)換成object類型就是裝箱,將object類型再轉(zhuǎn)回int類型就是拆箱。

描述的通俗點:

  • 裝箱 將值類型轉(zhuǎn)換成引用類型,
  • 拆箱 將引用類型轉(zhuǎn)換成值類型。
  • 那看來是要先了解一下引用類型和值類型了。

引用類型和值類型

在C#中,所有稱之為"類(class)"的類型,都是引用類型,而值類型都是標(biāo)注為結(jié)構(gòu)(struct)或者枚舉(enum)。

下面就來看一看引用類型和值類型,在實例化的時候發(fā)生了什么操作(首先自然是申明一下兩種類型了):

實例化了一個引用類型(SomeRef)和一個值類型(SomeVal),在調(diào)用的時候看看會發(fā)生什么:

上述代碼執(zhí)行完,可以看到在C#在操作引用類型的時候會執(zhí)行以下幾步

  1.在托管堆上分配一塊內(nèi)存;

  2.在分配的對象中,還需要加一些額外成員(類型對象指針,同步索引塊),這些成員必須初始化

  3.對象中的字段要初始化為0,(本例中在執(zhí)行someRef.x = 5時,將字段x改為5)  

  4.在托管堆上分配一個對象時,可能會執(zhí)行一次垃圾收集操作

看完引用類型,接下來看一下值類型:

可以看到相對于引用類型,值類型直觀的地方感覺就輕便了許多,

      1.在線程棧上分配一塊內(nèi)存

  2.字段就在對象本身(沒有額外的成員,也不包含指向?qū)嵗闹羔槪?/p>

  3.值類型實例不受垃圾回收期控制,減少了應(yīng)用程序在生存周期內(nèi)進行垃圾回收的次數(shù)

上面對值類型和引用類型做了個初步的解釋

下面來看看什么情況下會進行裝箱和拆箱

裝箱

現(xiàn)在假設(shè)我們需要將一組坐標(biāo)點存到ArrayList集合中,以便后續(xù)的步驟使用,那么我們會像下面這樣:

1.定義一個表示坐標(biāo)的值類型,里面分別有字段x(橫坐標(biāo)),字段y(縱坐標(biāo))

2.將幾個點存入ArrayList集合中

 

通過上例可以看到,通過調(diào)用ArrayList的Add方法,將Point坐標(biāo)點添加到集合中

這是ArrayList的Add方法原型,可以看到他的接受參數(shù)是一個object類型

但是object類型是由"類(class)"來聲明的,前面說到聲明為"類(class)"的類型都是引用類型,但是我們的Point聲明為"結(jié)構(gòu)(struct)"是一個值類型

可以看出,傳入的值類型會轉(zhuǎn)變?yōu)橐妙愋汀?/p>

C#中為了讓一個值類型轉(zhuǎn)換成一個引用類型,需要進行一次裝箱操作,下面看一下裝箱操作具體會發(fā)生哪些事情:

  1.在托管堆上分配內(nèi)存

  2.值類型的所有字段復(fù)制到新分配托管堆內(nèi)存上

  3.返回對象的地址(這個地址是對一個對象的引用,值類型現(xiàn)在是一個引用類型)

注:舊的point對象不變,值類型轉(zhuǎn)換成引用類型的本質(zhì)是重新建立了一個已裝箱的Point對象(引用類型)

拆箱

談完裝箱,再來談一談拆箱

在上述的坐標(biāo)點集合對象中,想要獲取第一個點的信息

現(xiàn)在知道ArrayList存的都是對象的引用(或指針),那要做的就是獲取元素0中包含的引用(或指針),并將它放到Point對象的實例pFirst中

來看看拆箱的過程,完成了那些事情

  1.獲取已裝箱Point對象中的字段地址

  2.將這些字段的值從托管堆中復(fù)制聲明的Point對象實例pFirst中(pFirst是值類型,在線程棧中分配內(nèi)存)

再說一句

目前在C#中,肯定不會再繼續(xù)用ArrayList來存儲一些對象的集合了,因為有了一組新的泛型集合,

例如用List<T>

在使用的就是就規(guī)定是什么類型,在存取數(shù)據(jù)的時候,不需要再進行多余的裝箱和拆箱操作

但是在寫代碼的時候還是會隱藏很多拆箱和裝箱的過程,注意盡量避免裝箱和拆箱的操作,如果不可避免,那就盡量減少裝箱和拆箱的操作,可以查看下方簡單示例(無實際意義):

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。

相關(guān)文章

  • C# ping網(wǎng)絡(luò)IP 實現(xiàn)網(wǎng)絡(luò)狀態(tài)檢測的方法

    C# ping網(wǎng)絡(luò)IP 實現(xiàn)網(wǎng)絡(luò)狀態(tài)檢測的方法

    下面小編就為大家?guī)硪黄狢# ping網(wǎng)絡(luò)IP 實現(xiàn)網(wǎng)絡(luò)狀態(tài)檢測的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • C#中StringBuilder用法以及和String的區(qū)別分析

    C#中StringBuilder用法以及和String的區(qū)別分析

    當(dāng)我們在初學(xué)使用C#時,常常會不知道該用StringBuilder合適還是用String高效,下面是我在學(xué)習(xí)當(dāng)中對StringBuilder和String的區(qū)別總結(jié),分享給大家。
    2013-03-03
  • C#中多態(tài)性的實現(xiàn)

    C#中多態(tài)性的實現(xiàn)

    這篇文章主要介紹了C#中多態(tài)性的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • winform多線程組件BackgroundWorker使用

    winform多線程組件BackgroundWorker使用

    這篇文章介紹了winform多線程組件BackgroundWorker的使用方法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • C# wpf使用ListBox實現(xiàn)尺子控件的示例代碼

    C# wpf使用ListBox實現(xiàn)尺子控件的示例代碼

    本文主要介紹了C# wpf使用ListBox實現(xiàn)尺子控件的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • C#異常捕獲機制圖文詳解

    C#異常捕獲機制圖文詳解

    在本文中我們給大家分享了關(guān)于C#異常捕獲機制的相關(guān)知識點內(nèi)容,有興趣的朋友們學(xué)習(xí)下。
    2019-02-02
  • C#泛型集合類System.Collections.Generic

    C#泛型集合類System.Collections.Generic

    這篇文章介紹了C#中的泛型集合類System.Collections.Generic,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • C#實現(xiàn)Winform無邊框移動的方法

    C#實現(xiàn)Winform無邊框移動的方法

    這篇文章主要介紹了C#實現(xiàn)Winform無邊框移動的方法,涉及C#針對WinForm窗口操作的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-09-09
  • 基于C#中XmlReader讀取Xml的深入分析

    基于C#中XmlReader讀取Xml的深入分析

    本篇文章是對C#中XmlReader讀取Xml進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • Unity C#打包AssetBundle與場景詳解

    Unity C#打包AssetBundle與場景詳解

    這篇文章主要給大家介紹了關(guān)于Unity C#打包AssetBundle與場景的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02

最新評論

北辰区| 炎陵县| 翁牛特旗| 陈巴尔虎旗| 西平县| 五台县| 偏关县| 翁源县| 出国| 扶绥县| 阿尔山市| 双流县| 绥棱县| 荔波县| 吕梁市| 邹平县| 遵义县| 东乡| 宝山区| 余庆县| 宁河县| 阿鲁科尔沁旗| 青河县| 连山| 晋城| 本溪市| 永城市| 河源市| 贵德县| 岫岩| 和硕县| 松桃| 卓尼县| 抚顺市| 新民市| 运城市| 五台县| 疏勒县| 高州市| 梧州市| 新乡县|