装箱(boxing)和拆箱(unboxing)是.NET提出得新概念!我们知道C#的所有类型都是由基类System.Object派生来的。如果在声明这些数据类型的时候都在堆(HEAP)中分配内存,会造成极低的效率。
为了解决这个问题,.NET的值类型在栈中分配内存,而引用型是在堆中分配内存,初始化为null,引用类型是需要通过垃圾回收器来回收内存,而值类型超过其作用域,就会失效。
有时我们需要将一个值类型转换为引用类型,而有时又需要把引用类型转换为值类型,有人把这种操作分别称之为装箱操作和拆箱操作。
即,装箱操作是指把一个值类型的数据转换为对象类型的,如:
using System;
class class1
{
static void Main()
{
int a=0;
object obj = i;
.......
}
}
上面的代码中,object obj = i;就是一个装箱操作,它把一个值类型,即int型的数据隐式转换为对象类型。
拆箱就是将一个引用类型的对象转换成值类型!比如:
int a=0;
object obj=a; //装箱操作
int b=(int)obj; //拆箱操作
从以上的操作过程中,我们看到装箱操作是一种隐式数据类型转换,是自动进行的,而拆箱操作是一种显示的数据类型转换,需要强制进行。
新闻热点
疑难解答