当它是引用类型的字段时是值类型装箱吗?

Vas*_*sya 3 .net c# boxing value-type

有代码:

struct A
{
   int b;
}

class B
{
  A a;
  int b;
}
Run Code Online (Sandbox Code Playgroud)

问题是:

  1. 是B盒装还是不盒装?
  2. B中是否位于堆栈或堆中?
  3. b是否是A盒装?
  4. b是在堆栈中还是在堆中?
  5. 是B盒装或不装箱?
  6. b是B堆栈还是堆?

我真的不明白它:(

Jon*_*eet 7

1)不,这里没有拳击.

2)a将在堆上,虽然这是一个实现细节

3)不,bin A没有盒装

4)bin A将存在于包含将存在的任何地方A(因此,对于类型的局部变量,A它通常在堆栈上;具有类的实例变量B或者任何静态变量,它将在堆上); 再次,这是一个实现细节

5)bin B也没有盒装

6)bin B将在堆上 - 再次,一个实现细节

这里没有拳击,因为你没有显示任何试图使用值类型值作为引用类型值(例如object或接口)的东西.

同样,整个堆栈/堆的区别是一个实现细节.您应该阅读Eric Lippert 关于该主题的博客文章.