详解C#装箱与拆箱

来源:互联网 发布:马云怎么靠淘宝挣钱 编辑:程序博客网 时间:2024/06/12 22:15

装箱(box)就是将值类型转换为引用类型的过程。而相反的过程就叫拆箱(unbox)。

一、装箱操作
   
例如: 
int val = 100; 
object obj = val; 
Console.WriteLine (“对象的值 = {0}", obj); 
这是一个装箱的过程,是将值类型转换为引用类型的过程。

值类型被装箱时发生了什么?

(1)在堆上分配内存。因为值类型最终有一个对象代表,所有堆上分配的内存量必须是值类型的大小加上容纳此对象及其内部结构(比如虚拟方法表)所需的内存量。
(2)值类型的值被复制到新近分配的内存中
(3)新近分配的对象地址被放到堆栈上,现在它指向一个引用类型。

二、拆箱操作

在刚才程序的基础上,再加一句话变成:
int val = 100; 
object obj = val; 
int num = (int) obj; 
Console.WriteLine ("num: {0}", num); 
这是一个拆箱的过程,是将值类型转换为引用类型,再由引用类型转换为值类型的过程。

注:被装过箱的对象才能被拆箱。

在装箱的时候,并不需要显示类型转换。但在拆箱时需要类型转换。这是因为在拆箱时对象可以被转换为任何类型。

注意:装箱操作可以隐式进行,但拆箱操作必须显示。
首先,检查这个对象实例,看它是否为给定值类型的装箱值。
然后,把这个实例的值拷贝给值类型的变量。

原创粉丝点击