C# tips ---值类型的装箱和拆箱

装箱过程,如:
myStruct myobj= new myStruct();
object baseobj =myobj;

在上述隐式转换中,myobj的内容被复制到堆上,放在一个装箱的对象上,baseobj对象引用设置为该对象。
让我们来看看在后台发生什么吧:实际上在最初定义myStruct结构时,.NET FX 隐式地提供另一个(隐式的)类,即装箱的myStruct类,它包括与myStruct结构相同的所有字段,但却是一个引用类型,存储在堆上。无论这个值类型是一个结构,还是一个枚举,定义它时都存在类似的装箱引用类型,相对应于所有的基本值类型,如 int,double和unit。不能也不必在代码中直接编程访问这些装箱类型,但在把一个值类型转化为object时,他们是在后台工作的对象。在隐式的把myStruct转换为object时,会实例化一个装箱的myStruct实例,并用myStruct结构中的所有数据进行初始化。

拆箱跟装箱类似,转换的过程是把自己装箱的myStruct对象的字段复制到一个新的myStruct结构中。

在使用装箱和拆箱时,这两个过程都把数据复制到新装箱和拆箱的对象上。这样,对装箱对象的操作就不会影响原来值类型的内容了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值