1. 程式人生 > >C#中的“裝箱”(boxing)與“拆箱”(unboxing)

C#中的“裝箱”(boxing)與“拆箱”(unboxing)

裝箱和拆箱:任何值型別、引用型別可以和object(物件)型別之間進行轉換。裝箱轉換是指將一個值型別隱式或顯式地轉換成一個object型別,或者把這個值型別轉換成一個被該值型別應用的介面型別(interface-type)。把一個值型別的值裝箱,就是建立一個object例項並將這個值複製給這個object,裝箱後的object物件中的資料位於堆中,堆中的地址在棧中。被裝箱的型別的值是作為一個拷貝賦給物件的。如:

int i = 10;

object obj = i; //隱式裝箱

object obj = object(i); //顯式裝箱

if(obj is int) //int

       Console.WriteLine(“OK”);

Console.WriteLine(obj.GetType()); //System.Int32


有兩種方式來檢視包裝以後的引用物件中包裝的原始資料的型別。要判斷原始型別是否是某個給定的原子型別,用is;如果要返回一個字串,可以用object類的GetType方法。

拆箱轉換是指將一個物件型別顯式地轉換成一個值型別,或是將一個介面型別顯式地轉換成一個執行該介面地值型別。注意裝箱操作可以隱式進行但拆箱操作必須是顯式的。拆箱過程分成兩步:首先,檢查這個物件例項,看它是否為給定的值型別的裝箱值。然後,把這個例項的值拷貝給值型別的變數。比如:

int i = 10;

object obj = i;

int j = (int)obj;

有兩種方式來檢視包裝以後的引用物件中包裝的原始資料的型別。要判斷原始型別是否是某個給定的原子型別,用is;如果要返回一個字串,可以用object類的GetType方法。

拆箱轉換是指將一個物件型別顯式地轉換成一個值型別,或是將一個介面型別顯式地轉換成一個執行該介面地值型別。注意裝箱操作可以隱式進行但拆箱操作必須是顯式的。拆箱過程分成兩步:首先,檢查這個物件例項,看它是否為給定的值型別的裝箱值。然後,把這個例項的值拷貝給值型別的變數。比如:

int i = 10;

object obj = i;

int j = (int)obj;