参考这样一段 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;

  }

posted on 2004-05-24 13:27  刘敏(Rustle Liu)  阅读(829)  评论(1编辑  收藏  举报