• C#装箱和拆箱

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

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

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

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

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

    装箱的过程

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

    int i = 1;
    object o = i;

    具体过程:

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

    装箱

更多...

加载中...