欢迎光临
我们一直在努力

C#装箱和拆箱

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

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

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

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

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

装箱的过程

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

int i = 1;
object o = i;

具体过程:

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

装箱

赞(0) 打赏
未经允许不得转载:hosteons中文网 » C#装箱和拆箱

评论 抢沙发

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册