裝箱與拆箱
目錄
生活中的裝箱與拆箱
C# 的裝箱與拆箱
值類型和引用類型
裝箱
拆箱
生活中的裝箱與拆箱
我們習(xí)慣了在網(wǎng)上購物,這次你想買本編程書 -- 《C 語言從入門到放棄》 ,下單成功后,賣家會(huì)幫你將這本入坑指南打好包裝,我們可以稱之為裝箱;經(jīng)過快遞員的快馬加鞭,風(fēng)雨無阻,包裹就直接送到你手上了。你一定會(huì)以迅雷不及掩耳盜鈴兒響叮當(dāng)之勢(shì)拆開包裝,這個(gè)過程我們可以稱之為拆箱,這時(shí),入坑指南就順利的送到你手上。
C# 的裝箱與拆箱
裝箱:將值類型(如 int ,或自定義的值類型等)轉(zhuǎn)換成 object 或者接口類型的一個(gè)過程。當(dāng) CLR 對(duì)值類型進(jìn)行裝箱時(shí),會(huì)將該值包裝為 System.Object 類型,再將包裝后的對(duì)象存儲(chǔ)在堆上。 拆箱就是從對(duì)象中提取對(duì)應(yīng)的值類型的一個(gè)過程。
裝拆箱就是一個(gè)相反的過程。裝箱是隱式的;拆箱必定是顯式的。
相對(duì)于簡(jiǎn)單的賦值而言,裝箱和拆箱都需要進(jìn)行大量的數(shù)據(jù)計(jì)算。對(duì)值類型進(jìn)行裝箱時(shí),CLR 必須重新分配一個(gè)新的對(duì)象。拆箱所需的強(qiáng)制轉(zhuǎn)換也需要進(jìn)行大量的計(jì)算,只是相比,程度不高,并且也可能會(huì)出現(xiàn)類型轉(zhuǎn)換的異常情形。如果你的操作正處于循環(huán)的中心,通過測(cè)試(如:Stopwatch),你會(huì)很明顯的感覺到性能問題。
.NET 2.0 引入的泛型其實(shí)在很大的程度上解決了裝拆箱產(chǎn)生的類型轉(zhuǎn)換問題,也減少了類型轉(zhuǎn)換所引起的運(yùn)行時(shí)的異常,從而提高了性能。
static void Main(string[] args)