1:结构是值类型[ValueType],类是引用类型[RefType].类型[Type]性质上的差别,决定了Struct,Class的差别【建议看它们的内存分配方式】 Struct是ValueType,它和int,Decimal类型一样分配在Stack上,直接保存其值。分配速度、效率比较快.并且使用完毕,会立即回收. 2:例子 //Code in C# int i=100;//这样i就在Stack上有了自己的、大小为4个字节的房子,值为100[value]. int j=i;//这样j也在在Stack上有了自己的、大小为4个字节的房子,值为100[value]. 进行复制,创建一个同值新对象
这种机制同理可以用到Strcut struct LeadbbsMember { string UserName; int Score; }
LeadbbsMember Roboth=new LeadbbsMember();//分配在 Stack上,尽管它用了new Roboth.UserName="啊光"; Roboth.Score=30;
LeadbbsMember ss; ss=Roboth;//进行复制,创建一个同值新对象
现在假设Struct代表很庞大的对象,想这样的"=",势必会带来很大的资源浪费[stack资源本来就有限],所以Struct平常表示较小的东东。 3:结构不能继承,必然失去了继承带来的好处【比如服用、扩张】
4:虽然Strcut,class在语法上很相近。但是如果内部也有不一样的地方 结构: 没有默认的构造函数,但是可以添加构造函数 没有析构函数 没有 abstract 和 sealed(因为不能继承) 不能有protected 修饰符 可以不使用new 初始化 在结构中初始化实例字段是错误的 类: 有默认的构造函数 有析构函数 可以使用 abstract 和 sealed 有protected 修饰符 5:没有class,没有结构。很多设计模式都会消失。也不会有经典的Petshop。所以Class一般表示某种思想,模式的体现。而结构一般用来表示单纯数据 6:关于Ref Struct,Class在做为方法的参数数时,也有所不同。 class总是以引用的方式传递。所以在方法内部做的任何修改都会在外部体现。 Struct是通过值的方式传递,在方法内部的修改,不会影响外部体现。【因为它传的是副本】 在结构前加上ref,它就以引用的方式传递了。
|