现在的位置: 首页 > 综合 > 正文

再讨论类和结构

2012年10月15日 ⁄ 综合 ⁄ 共 1003字 ⁄ 字号 评论关闭

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

 

抱歉!评论已关闭.