欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

C#中怎么實(shí)現(xiàn)裝箱與拆箱操作-創(chuàng)新互聯(lián)

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)C#中怎么實(shí)現(xiàn)裝箱與拆箱操作,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

創(chuàng)新互聯(lián)建站憑借專業(yè)的設(shè)計(jì)團(tuán)隊(duì)扎實(shí)的技術(shù)支持、優(yōu)質(zhì)高效的服務(wù)意識(shí)和豐厚的資源優(yōu)勢(shì),提供專業(yè)的網(wǎng)站策劃、做網(wǎng)站、網(wǎng)站建設(shè)、網(wǎng)站優(yōu)化、軟件開發(fā)、網(wǎng)站改版等服務(wù),在成都十年的網(wǎng)站建設(shè)設(shè)計(jì)經(jīng)驗(yàn),為成都1000多家中小型企業(yè)策劃設(shè)計(jì)了網(wǎng)站。

疑問

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

C#中怎么實(shí)現(xiàn)裝箱與拆箱操作

描述的通俗點(diǎn):

  • 裝箱 將值類型轉(zhuǎn)換成引用類型,

  • 拆箱 將引用類型轉(zhuǎn)換成值類型。

  • 那看來是要先了解一下引用類型和值類型了。

引用類型和值類型

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

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

C#中怎么實(shí)現(xiàn)裝箱與拆箱操作

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

C#中怎么實(shí)現(xiàn)裝箱與拆箱操作

C#中怎么實(shí)現(xiàn)裝箱與拆箱操作

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

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

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

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

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

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

C#中怎么實(shí)現(xiàn)裝箱與拆箱操作

C#中怎么實(shí)現(xiàn)裝箱與拆箱操作

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

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

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

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

上面對(duì)值類型和引用類型做了個(gè)初步的解釋

下面來看看什么情況下會(huì)進(jìn)行裝箱和拆箱

裝箱

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

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

C#中怎么實(shí)現(xiàn)裝箱與拆箱操作

2.將幾個(gè)點(diǎn)存入ArrayList集合中

 C#中怎么實(shí)現(xiàn)裝箱與拆箱操作

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

C#中怎么實(shí)現(xiàn)裝箱與拆箱操作

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

C#中怎么實(shí)現(xiàn)裝箱與拆箱操作

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

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

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

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

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

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

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

拆箱

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

在上述的坐標(biāo)點(diǎn)集合對(duì)象中,想要獲取第一個(gè)點(diǎn)的信息

C#中怎么實(shí)現(xiàn)裝箱與拆箱操作

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

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

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

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

再說一句

目前在C#中,肯定不會(huì)再繼續(xù)用ArrayList來存儲(chǔ)一些對(duì)象的集合了,因?yàn)橛辛艘唤M新的泛型集合,

例如用List<T>

C#中怎么實(shí)現(xiàn)裝箱與拆箱操作

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

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

C#中怎么實(shí)現(xiàn)裝箱與拆箱操作

上述就是小編為大家分享的C#中怎么實(shí)現(xiàn)裝箱與拆箱操作了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司行業(yè)資訊頻道。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

網(wǎng)頁題目:C#中怎么實(shí)現(xiàn)裝箱與拆箱操作-創(chuàng)新互聯(lián)
URL網(wǎng)址:http://chinadenli.net/article8/gcjop.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)定制網(wǎng)站企業(yè)建站網(wǎng)頁設(shè)計(jì)公司App設(shè)計(jì)外貿(mào)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設(shè)計(jì)