裝箱轉換是指將一個值類型隱式地轉換成一個object類型,或者把這個值類型轉換成一個被該值類型應用的接口類型(interface-type)。把一個值類型的值裝箱,也就是創建一個object實例並將這個值復制給這個object,比如:
int i=10;
object obj=i;
用下圖可以表示裝箱的過程:
我們也可以用顯式的方法來進行裝箱操作:
int i=10;
object obj=object(i);
我們可以假想存在一個boxing類型,其聲明如下:
class T_Box
{
T value;
T_Box(Tt){
value=t;
}//該類型的構造函數
}
這裡T表示將要裝箱的值的類型,它可以是int、char、enum等等。現在我們要將類型為T的值v裝箱,其執行過程為:執行new T_Box(v),將返回結果的實例作為對象類型的值,那麼下面的語句:
int i=10;
object obj=i;
等價於:
int i=10;
object obj=new int_Box(i); //裝i裝箱成對象obj
我們看一下下面的程序。
程序清單4-4:
using System
class Test{
public static void Main(){
int i=10;
object obj=i; //對象類型
if(obj is int){
Console.Write("The value of i is boxing!");
}
i=20; //改變i的值
Console.WriteLine("int:i={0}",i);
Console.WriteLine("object:obj={0}",obj);
}
}
輸出結果為:
The value of i is boxing!
int:i=20;
object:obj=10;
這就證明了,被裝箱的類型的值是作為一個拷貝賦給對象的。