? ? ?c#中,數(shù)據(jù)類型分為值類型和引用類型邀杏,裝箱和拆箱屬于值類型和引用類型間的轉(zhuǎn)換操作贫奠。
? ? ? ?裝箱:值類型向引用類型轉(zhuǎn)換時(shí)發(fā)生唬血, 當(dāng) CLR 對值類型進(jìn)行裝箱時(shí),會(huì)將該值包裝到 System.Object 內(nèi)部唤崭,再將后者存儲在托管堆上拷恨。
? ? ? ?拆箱:從 object 類型到值類型或從接口類型到實(shí)現(xiàn)該接口的值類型的顯式轉(zhuǎn)換。拆箱操作包括:?
? ? ? (1)檢查對象實(shí)例谢肾,以確保它是給定值類型的裝箱值腕侄。?
? ? ? ?(2)將該值從實(shí)例復(fù)制到值類型變量中
? ? ? ?向上轉(zhuǎn)型:將子類對象轉(zhuǎn)為父類對象,父類對象可以是接口芦疏。轉(zhuǎn)化后的對象具有父類的所有方法冕杠,當(dāng)該方法被子類重寫時(shí),具有的是被子類重寫過的方法酸茴。若父類對象是接口或者抽象類分预,調(diào)用方法時(shí),自動(dòng)找到子類同名方法薪捍,執(zhí)行子類同名方法笼痹。向上轉(zhuǎn)換時(shí)安全的。如下圖1:
圖1
? ? ? ? 向下轉(zhuǎn)型:把父類對象轉(zhuǎn)為子類對象飘诗,轉(zhuǎn)化后的子類對象与倡,跟一般的繼承子類對象一樣界逛。具有子類所有方法(包括重寫方法)+父類所有方法(被重寫的方法昆稿,按重寫的算。)向下轉(zhuǎn)型屬于不安全轉(zhuǎn)型息拜,使用轉(zhuǎn)型對象時(shí)溉潭,需要先判斷轉(zhuǎn)型是否成功。其轉(zhuǎn)型的約束條件為:該對象進(jìn)行過向上轉(zhuǎn)型少欺,并把它轉(zhuǎn)換為原來的類喳瓣。如下圖2:
圖2