【问题标题】:Behind the scenes while boxing and unboxing装箱和拆箱时的幕后花絮
【发布时间】:2019-08-16 16:33:46
【问题描述】:

当我们进行装箱和拆箱时,谁能解释一下幕后实际发生了什么?我知道装箱是将值转换为引用类型,拆箱是相反的,但在装箱的幕后,装箱变量实际上存储在堆中,装箱和拆箱的基本用途是什么?

谢谢!

【问题讨论】:

标签: c#


【解决方案1】:

根本没有魔法,只是保持简单...
装箱是将值类型实例转换为引用类型实例的行为。
拆箱通过将对象(引用类型)转换回原始值类型来反转操作。

所以你必须了解 value-typereference-type 以及 之间的区别

值类型 - 内置类型,如 int、string、char、double 和 struct - 存储在名为 STACK
Reference 的内存块中type - 类、委托、对象 - 存储在名为 HEAP

的内存块中

现在,当您理解了上面的图表后,让我们来看看真实、简单的代码。

    int i = 1;       
    object O = i;         // Box the int
    int j = (int)O;       // Unbox the int

【讨论】:

  • struct 是值类型而不是引用类型。
【解决方案2】:

根据MSDN

装箱和拆箱启用值类型 被视为对象。拳击 值类型将它封装在一个 Object 引用类型的实例。 这允许值类型为 存储在垃圾收集堆上。 拆箱从中提取值类型 对象。

[...]

关于简单的作业, 装箱和拆箱是 计算昂贵的过程。 当一个值类型被装箱时,一个 必须分配全新的对象 并建造。在较小程度上, 拆箱所需的演员也是 计算成本高。

【讨论】:

    【解决方案3】:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-28
    • 1970-01-01
    • 1970-01-01
    • 2018-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多