什么是装箱和拆箱?

时间:2022-07-25
本文章向大家介绍什么是装箱和拆箱?,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

什么是装箱和拆箱?

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


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

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

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

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

using System;
class BoxingExample
{
 static void Main()
    {
 int x = 123;
 object obj = x;     // 装箱
 int y = (int)obj;    // 拆箱
    }
}

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

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

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

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

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

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