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

解决方案 »

  1.   

    请教??结构、类、接口的区别 
    http://community.csdn.net/Expert/topic/2895/2895734.xml?temp=.6542169
      

  2.   

    引用dotnet3000(阿星) 的话:
    --------------------------------------------------------------------------------
    在分配内存的时候,要确定分配的内存大小,就要确定其每一个成员的内存占用。 对于 class Item 成员,仅仅需要分配一个引用的内存而已,跟实际的 class Item 的内存占用无关;而对于 struct Item 成员,这时就需要确定 struct Item 的内存占用,struct Item 又要确定其成员的内存占用... 
    --------------------------------------------------------------------------------那这么说来,用结构岂不是会更占资源?
    类在声明时,只创建引用,并保存在栈中,实例化时才会获得分配内存,在堆中占地方。
    结构则在声明时就占了地方,这样会不会显得更占资源,虽然它是在栈中。
      

  3.   

    struct是值类型,在栈中分配空间,速度快且有大小限制。
    class是引用类型,在堆中分配内存,速度慢但有空间优势。
      

  4.   

    引用dotnet3000(阿星) 的话:
    --------------------------------------------------------------------------------
    在分配内存的时候,要确定分配的内存大小,就要确定其每一个成员的内存占用。 对于 class Item 成员,仅仅需要分配一个引用的内存而已,跟实际的 class Item 的内存占用无关;而对于 struct Item 成员,这时就需要确定 struct Item 的内存占用,struct Item 又要确定其成员的内存占用... 
    --------------------------------------------------------------------------------那这么说来,用结构岂不是会更占资源?
    类在声明时,只创建引用,并保存在栈中,实例化时才会获得分配内存,在堆中占地方。
    结构则在声明时就占了地方,这样会不会显得更占资源,虽然它是在栈中
      

  5.   

    是占资源,所以struc适合亲量级别得数据结构描述,
    但是他得速度要快!