打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
理解装箱和拆箱

什么是装箱和拆箱

  装箱是将值类型转换为引用类型或者是值类型(如:结构)实现任一接口类型的过程。当 CLR 对值类型进行装箱时,会将该值包装到 System.Object 内部,再将后者存储在托管堆上。拆箱就是将从对象中提取值类型或者接口类型到实现该接口的值类型的显式转换。装箱时隐性的,拆箱是显式的。

 

装箱

   装箱是值类型到引用类型或者这个值类型所实现的任何接口类型的隐式转换。 对值类型装箱会在堆中分配一个对象实例,并将该值复制到新的对象中。

  下面代码在做装箱操作:在堆栈上创建对象引用 obj,而在堆上则引用 int 类型的值。 该值是赋给变量 i 的值类型值的一个副本。

1 int i = 123;2 //值类型变成引用类型,装箱,隐式的3 object obj = i;

 下图说明了两个变量 i 和 obj 之间装箱转换:

 

拆箱

  下面的代码表示先进行装箱操作再接着进行拆箱操作:

1 int i = 123;2 //值类型变成引用类型,装箱,隐式的3 object obj = i;4 //将从引用类型中提取值类型,拆箱,显式的5 int j = (int)obj;

代码过程如图:

 

 拆箱的操作包括:

  • 检查对象实例,以确保它是给定值类型的装箱值。

  • 将该值从实例复制到值类型变量中。

 

装箱和拆箱对程序性能的影响

  相对于简单的赋值而言,装箱和取消装箱过程需要进行大量的计算。 对值类型进行装箱时,必须分配并构造一个新对象。反之,拆箱所需的强制转换也需要进行大量的计算。所以在程序中应该尽量减少装箱和拆箱的操作。

 

参考资料&进一步阅读

装箱和取消装箱

值类型

引用类型 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C#中值类型和引用类型之间的转换
C# 装箱和拆箱[整理] - worm128的日志 - 网易博客
c#装箱和拆箱
【C#】 装箱 (boxing) 和拆箱 (unboxing)
显示实现接口
设计模式-创建型模式-单例模式
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服