为什么C#中的类没有循环布局问题?

naw*_*fal 8 c# struct class circular-dependency cyclic-reference

public struct Unit
{
    Unit u;
}
Run Code Online (Sandbox Code Playgroud)

原因:

类型为"单位"的结构成员"Unit.u"会在结构布局中生成一个循环.

public class Unit
{
    Unit u;
}
Run Code Online (Sandbox Code Playgroud)

编译.我理解我认为的问题.引用Unit对象时将形成无限循环,因为它必须初始化另一个成员Unit,依此类推.但是为什么编译器只是为了限制问题structs呢?这个问题也不存在class吗?我错过了什么吗?

Jon*_*eet 21

问题在于布局.

何时Unit是结构,a的任何值Unit都必须包含相同类型的另一个值(因此大小相同),无限制.这不可能.我想你可以争辩说,没有其他字段,字段Unit应该不占用内存,所以你可以在其中包含它 - 但我相信CLR的工作方式确保所有结构占用至少1个字节...

何时Unit是类,Unit对象只需包含对另一个对象的引用Unit.没有存储问题,并且值可以为null.

可以这样想:你不能拥有一栋房子,里面有另一栋用同一块蓝图建造的房子,但你当然可以买一幢房子,里面有一张纸,上面有类似房子的地址......