C#之装箱与拆箱
C#之裝箱與拆箱
? ? ? ? ? 裝箱與拆箱
? ? ? ? ??裝箱和拆箱是C#類型系統(tǒng)的核心概念,是將值類型的數(shù)據(jù)轉(zhuǎn)換為引用類型的數(shù)據(jù),或者將引用類型數(shù)據(jù)轉(zhuǎn)換成值類型的數(shù)據(jù)的操作。
? ? ? ? ??這種相互轉(zhuǎn)換可以在兩類數(shù)據(jù)間建立一個(gè)等價(jià)連接,本質(zhì)上,是將所有數(shù)據(jù)視為對(duì)象。
? ? ? ? ??裝箱轉(zhuǎn)換
? ? ? ? ??指將一個(gè)值類型數(shù)據(jù)隱式轉(zhuǎn)換為Object類型,或者該值類型應(yīng)用的接口類型interface-type將其裝箱,也就是創(chuàng)建一個(gè)基于該值類型的Object實(shí)例的過程。
? ? ? ? ??比如:將值類型變量chData的值賦予對(duì)象objData
? ? ? ? ??Char chData = 'a'
? ? ? ? ??Object objData =chData
? ? ? ? ??Console.WriteLine(objData)
? ? ? ? ??第二行的賦值暗示調(diào)用一個(gè)裝箱操作,chData字符變量的值被復(fù)制給ojbData對(duì)象,字符變量和對(duì)象都同時(shí)存儲(chǔ)在棧中,但是,對(duì)象ojbData的值卻留在堆中。
? ? ? ? ??拆箱轉(zhuǎn)換
? ? ? ? ??裝箱轉(zhuǎn)換的逆操作,指將一個(gè)對(duì)象類型顯式的轉(zhuǎn)換成一個(gè)值類型的數(shù)據(jù),或者是將一個(gè)接口類型,顯式的轉(zhuǎn)換成一個(gè)執(zhí)行該接口的值類型。
? ? ? ? ??拆箱的過程分為兩步,首先,需要檢查對(duì)象實(shí)例,判斷是否為給定的值類型的裝箱,然后再將實(shí)例的值賦給值類型變量。
? ? ? ? ??比如:一個(gè)簡(jiǎn)單的拆箱過程
? ? ? ? ??Int intData = 5
? ? ? ? ??Object objData = intData
? ? ? ? ??Int intData2 = (int) objData
? ? ? ? ??拆箱轉(zhuǎn)換過程,與裝箱過程相反。
? ? ? ? ??注意,裝箱轉(zhuǎn)換和拆箱轉(zhuǎn)換,必須遵循類型兼容原則,否則,會(huì)造成編譯異常。
總結(jié)