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,它就以引用的方式传递了。