gpt4 book ai didi

c# - 当 ValueType 被声明为类的一部分时是否会被装箱?

转载 作者:行者123 更新时间:2023-11-30 13:24:29 25 4
gpt4 key购买 nike

考虑这个类:

public class Foo
{
public Int32 MyField;
}

我猜“MyField”成员不在线程堆栈上,因为它可以被多个线程访问,它肯定在托管堆中,但这是否意味着它每次使用时都被装箱和拆箱?

提前致谢

最佳答案

不是,不是每次用都装箱的。仅当您将值类型强制转换为引用类型时才会发生装箱——它实际上与为该值分配实际内存的位置无关(或者即使分配了任何内存)。

在您的情况下,决定它是否被装箱的是您对 MyField 的操作方式,而不是 Foo 的处理方式。

  //No Boxing
var f = new Foo();
f.MyField = 5;
int val = f.MyField;


//Boxing
var f = new Foo();
f.MyFIeld = 5;
object val = f.MyField;

请注意,在第二个示例中,val 现在包含对装箱 int 的引用。 MyField 仍然(并将永远保持)一个未装箱的 int 并且可以在不拆箱的情况下访问(感谢您指出所需的说明,LukeH)

关于c# - 当 ValueType 被声明为类的一部分时是否会被装箱?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4216612/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com