结构有 class 引用然后它将存储在堆栈或堆 C#

Struct has class reference then it will store on stack or heap C#

众所周知,结构是值类型,因此分配在堆栈上,但是当结构具有 class 引用时,它将存储在堆栈或堆上。

 public class A {
       public int Value { get; set; }
    } 

    struct Rectangle
    {
        public int width;

        public int height;

        public A a;

    }      

 static void Main(string[] args)
        {
            Rectangle r ; // r will create on stack
            r.width = 5;  // it will create on stack as well,
            r.a = new A(); // but what about A object, it will stored on stack or heap, as i know class object it stored on heap, now it is inside the struct. 
        }

我知道这是一个很常见的问题,我有 google 它,没有找到正确的答案。 提前致谢

struct is a value type, and is therefore allocated on the stack

这是不正确的。更正确的说法是“值类型可以存储在堆栈中”,参见 truth about value types。如果作为参数给出,值类型将 可能 存储在堆栈中,即使抖动可以随意将其存储在任何地方。但是如果该结构是 class 的一部分,它将与 class.

的所有其他字段一起存储在堆上

现在,对 A 的引用将作为结构的一部分存储,即 x64 上的 8 个字节。但是它指向的实际对象,包括 int Value,将存储在堆上。