• C2C 模式解析:消费者与消费者之间的电子商务
  • 什么是EAV(Entity-Attribute-Value)模型
  • 什么是闭包表,闭包表详解
  • B2B 模式解析:企业与企业之间的电子商务
  • B2C模式解析:企业与消费者之间的电子商务
  • 电子商务模式概述:B2C、B2B、C2C、C2M、O2O
  • 电商行业的瓶颈与挑战
  • 电子商务的崛起与行业变革
  • uni.downloadFile 使用注意事项
  • uniapp drawImage 加载网络图片
  • 什么是装箱和拆箱 - 编程那点事

    编程那点事编程那点事

    专注编程入门及提高
    探究程序员职业规划之道!

    什么是装箱和拆箱

    由于C#中所有的数据类型都是从基类System.Object继承而来的,所以值类型和引用类型可以通过显式或隐式操作互相转换,这个过程就被称为装箱(boxing)和拆箱(unboxing)的过程。

    什么是装箱(boxing

    简单来说就是将值类型转换为引用类型,它是隐式转换。装箱会在堆中分配一个对象实例,并将值复制到新的对象中。

    拆箱过程中需要注意以下2

    1:已装箱的值类型的引用的变量为NULL,会引发NullRefreenceException异常

    2:一个引用指向的对象在拆箱时不是用的装箱时所使用的类型,会引发InvalidCastException异常

    什么是拆箱(unboxing

    将引用类型转换为值类型,他是显式转换。拆箱首先检查对象实例确保它是给定值类型的一个装箱值,再将该值从实例复制到值类型变量中。

    装箱和拆箱的效率

    值类型和引用类型最本质的区别就是值类型分配在栈中,而引用类型分配在堆上。装箱操作其实就是把值类型放到堆上,拆箱操作其实就是把在堆上的值取出来放到栈上。从原理商量来讲,装箱会生成全新的引用对象,这会有时间损耗,也就造成了效率的降低。所以要尽量避免装箱。

    装箱需要完成以下3个步骤

    首先,给值类型在托管堆中分配内存,除了值类型本身所分配内存外,内存总量还要加上类型对象指针和同步块索引所占用的内存。

    其次,将值类型的值复制到新分配的堆内存中

    最后,返回已经成为引用类型的对象的地址

    综上,装箱会带来性能损耗。

    未经允许不得转载: 技术文章 » .NET编程 » 什么是装箱和拆箱