【问题标题】:Pass by reference/value — Boxing/unboxing relation按引用/值传递——装箱/拆箱关系
【发布时间】:2016-11-17 20:51:31
【问题描述】:

我正在阅读有关 passing by reference in C# 的内容,在阅读的同时,我阅读了以下句子,这让我感到困惑。

“值类型在通过引用传递时没有装箱。”

虽然我知道拳击是什么,但我想我错过了这句话中包含的实际信息深度。我知道它基本上说没有发生装箱,当然也没有拆箱,但我还能从中得出什么其他结论?按值/引用传递是否与装箱/拆箱有关?

【问题讨论】:

  • 装箱与通过引用传递值类型无关,因为装箱速度很慢。我猜这本书的作者想展示按值传递引用类型(当你有引用时你可以更改对象属性但不能更改引用本身)和通过引用传递值类型之间的区别(行为将类似于传递引用类型,但你不会慢速拳击)
  • 我不同意这是一个重复的问题。他们在谈论同一件事,但是在解决 OP 问题的 dup 上没有给出答案。投票重新开放。
  • This answer 与 OP 的问题更直接相关。
  • 链接的文章的其余引用是,“不要将通过引用传递的概念与引用类型的概念混淆。这两个概念不一样。可以修改方法参数byref不管是值类型还是引用类型。通过引用传递的时候没有值类型的装箱。”考虑到这一点,我认为文章作者只是想说“按引用传递”不会使值类型成为“引用类型”,即它不会对值类型进行装箱(装箱将值类型存储在object,这是一个引用类型)。
  • 不,它们不相关,当需要将值类型视为引用类型时,需要装箱。通过引用传递用于方法调用中的别名位置。

标签: c# pass-by-reference boxing unboxing


【解决方案1】:

如果您通过引用传递值类型,则不涉及装箱和拆箱。存在内存别名,正如 c# in nutshell book 中所说的那样。你甚至可以在 Linqpad 中试用。在 IL 代码中显示后,您将看到不涉及装箱/拆箱。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-15
    相关资源
    最近更新 更多