裝箱(boxing)和拆箱(unboxing)是.NET提出得新概念!我們知道C#的所有類(lèi)型都是由基類(lèi)System.Object派生來(lái)的。如果在聲明這些數(shù)據(jù)類(lèi)型的時(shí)候都在堆(HEAP)中分配內(nèi)存,會(huì)造成極低的效率。
為了解決這個(gè)問(wèn)題,.NET的值類(lèi)型在棧中分配內(nèi)存,而引用型是在堆中分配內(nèi)存,初始化為null,引用類(lèi)型是需要通過(guò)垃圾回收器來(lái)回收內(nèi)存,而值類(lèi)型超過(guò)其作用域,就會(huì)失效。
有時(shí)我們需要將一個(gè)值類(lèi)型轉(zhuǎn)換為引用類(lèi)型,而有時(shí)又需要把引用類(lèi)型轉(zhuǎn)換為值類(lèi)型,有人把這種操作分別稱(chēng)之為裝箱操作和拆箱操作。
即,裝箱操作是指把一個(gè)值類(lèi)型的數(shù)據(jù)轉(zhuǎn)換為對(duì)象類(lèi)型的,如:
using System;
class class1
{
static void Main()
{
int a=0;
object obj = i;
.......
}
}
上面的代碼中,object obj = i;就是一個(gè)裝箱操作,它把一個(gè)值類(lèi)型,即int型的數(shù)據(jù)隱式轉(zhuǎn)換為對(duì)象類(lèi)型。
拆箱就是將一個(gè)引用類(lèi)型的對(duì)象轉(zhuǎn)換成值類(lèi)型!比如:
int a=0;
object obj=a; //裝箱操作
int b=(int)obj; //拆箱操作
從以上的操作過(guò)程中,我們看到裝箱操作是一種隱式數(shù)據(jù)類(lèi)型轉(zhuǎn)換,是自動(dòng)進(jìn)行的,而拆箱操作是一種顯示的數(shù)據(jù)類(lèi)型轉(zhuǎn)換,需要強(qiáng)制進(jìn)行。
新聞熱點(diǎn)
疑難解答