装箱转换是指将一个值类型隐式地转换成一个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;
这就证明了,被装箱的类型的值是作为一个拷贝赋给对象的。
本文来自编程入门网:http://www.bianceng.cn/Programming/csharp/200709/4334.htm