装箱和拆箱

本文详细介绍了C#中值类型与引用类型之间的转换——装箱与拆箱的过程及应用场景。通过实例说明如何利用这些特性简化类型转换并实现对不同类型的统一处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//值类型转为引用类型_装箱  
  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可以把这两者的优点统一起来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值