参考这样一段 CSharp 代码:
public class Item
{
public Item AItem;
}
编译通过,完全没有问题,但是如果把 class 改为 struct:
public struct Item
{
public Item AItem;
}
编译报错:error CS0523: 结构成员“Item.AItem”(属于类型“Item”)在结构布局中导致循环
这是由值类型和引用类型的性质不同所决定的。
在分配内存的时候,要确定分配的内存大小,就要确定其每一个成员的内存占用。
对于 class Item 成员,仅仅需要分配一个引用的内存而已,跟实际的 class Item 的内存占用无关;而对于 struct Item 成员,这时就需要确定 struct Item 的内存占用,struct Item 又要确定其成员的内存占用...
由此,以下的代码也将是错误的:
public struct StructA
{
public StructB b;
}
public struct StructB
{
public StructA a;
}