C#装箱和拆箱

  • 内容
  • 评论
  • 相关

装箱与拆箱(又叫取消装箱)就是值类型与引用类型的转换,是值类型和引用类型之间的桥梁。

之所以可以这样转换是因为 CTS 允许这样做。只有值类型才存在装箱和拆箱。

装箱是隐式的,拆箱是显式的,因为你需要告诉 CLR 你要给拆出来的值赋予什么类型。

通过深入了解装箱与拆箱的过程,我们可以知道其中包含了对堆上内存的操作,故会消耗性能,这是完全不必要的。

另外值得注意的是,装箱需要比原数据更多的空间,因为它需要两个引用类型的标准配置:类型对象指针和同步块索引。

装箱的过程

装箱就是把值类型转换为 object 类型或由此值类型实现的任何接口类型,如下图所示:

int i = 1;
object o = i;

具体过程:

  • 在堆中申请内存,内存大小为值类型的大小,再加上额外固定空间(类型对象指针和同步块索引)。
  • 将值类型的字段值拷贝到新分配的内存中。
  • 返回新引用对象的内存地址(给栈上的引用)。

装箱

本文标题:C#装箱和拆箱

本文地址:https://www.hosteonscn.com/5006.html

评论

0条评论

发表评论

邮箱地址不会被公开。 必填项已用*标注