前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >什么是装箱和拆箱?

什么是装箱和拆箱?

作者头像
高一峰
修改2020-09-22 14:34:55
8620
修改2020-09-22 14:34:55
举报
文章被收录于专栏:高渡号外高渡号外

什么是装箱和拆箱?

—— 新手编程1001问之C#编程基础


这是一个好问题,因为它看上去高大上,甚至跨学科和领域,实际上,它只是一个非常简单的问题,但是,很多编程新手,被这个“装箱和拆箱”的名称给整蒙圈了。就直接从它面前绕过去了,以至于每每遇到就如鲠在喉,编程一个心结。这玩意,究竟是个啥呢?既然出现在编程语言里,肯定不会是一个物流名词,那它究竟是个啥操作呢?

好的,今天面对这个简单问题,咱们不绕开,仔细的把它说清楚。

C# 采用统一的类型系统,因此任意类型的值都可视为object。每种C#类型都直接或间接地派生自object类型,而object是所有类型的最终基类。

只需将值视为类型object,即可将指定类型的值视为对象。通过执行装箱和拆箱操作,就可以将值类型的值视为对象。在以下示例中,int值被转换成object,然后又恢复成int。

代码语言:javascript
复制
using System;
class BoxingExample
{
 static void Main()
    {
 int x = 123;
 object obj = x;     // 装箱
 int y = (int)obj;    // 拆箱
    }
}

那么,上面这个操作过程,我们就称之为装箱和拆箱。

装箱:当值类型的值转换成 object 类型时,将分配object实例(亦称为“箱”)来包含值,然后该值会复制到相应的箱中。

拆箱:当object引用被显式转换成值类型时,将检查引用的object是否是具有正确值类型的箱;如果检查成功,则会将箱中的值复制出来。

C#的统一类型系统实际上意味着可以”按需”将指定的类型转换成对象,然后,还能显式地将对象转换成指定的类型。

实际上,装箱和拆箱的常规用途就是实现引用类型和值类型的转换。

当然,我们需要注意的是这个操作看起来很简单,但如非必须,却是没有必要这么干的。特别是当值类型装箱操作以后,就变成引用类型,不仅增大内存占有,还会降低使用效率。虽然,这样的变化一般用户是无法察觉的,但是,追求更好的性能难道不是咱们程序员应该追求的美德吗?

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 高渡号外 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是装箱和拆箱?
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档