//值类型转为引用类型_装箱
int i=3;
object o=i;
//引用类型转为值类型_拆箱
int j=(int)i;
用处:
1.
便于 类型装换
比如给个函数参数 预先并不知道传入的是什么类型
object 定义就很有效
例如一个函数要处理传入的参数,但是这个参数可能是A、C、E这三种类型的类,那么一般做法就是重载函数。如果要是使用box和unbox的话,就可以把形参设定为object类型的,然后再用gettype来确定到底是哪种类型的类被传来处理。明白不?写个例子吧:
private void DisposeFunc( object O )
{
switch( o.getType().ToString() )
{
case "A ": //处理A;
case "C ": //处理C;
。。。。。。。。。。。。。。
}
}
2.
关于装箱和拆箱,往往是在对值类型进行的操作,目的是将值类型数据从在栈上的存储转移到堆上,这样就和普通Object具有了同样的存储解构:栈上存储地址,堆上存储数据.这样就可以达到统一处理的效果.
3.
装箱和拆箱的意义可以理解为值类型和引用类型的转换...要理解转换的意义,你就必须要先了解值类型和引用类型的区别和特点
当你把一个值类型赋予给另外一个值类型,则会在堆栈中复制一个副本.修改值类型的数据,则不会影响到另一个数据值..而引用类型的赋值.把一个引用变量赋予另一个引用变量,则复制的是引用,而非内存值,所以,修改一个变量会影响到另外一个引用.
4.
值类型操作简便高效,而引用类型更符合OO设计的基本准则。
比如int as value type只占4字节,最小的Object(不含数据)也要8字节。value type如果用栈操作的话不需要而外的创建对象和GC开销。但是.NET框架是统一在Object继承的基础上,所以所有的类型都必须符合Object的引用类型定义和操作,所以才可能有Dosomething(Object param);这样的抽象。
box和unbox可以把这两者的优点统一起来。