Discuz!NT
欢迎 游客 , 注册 | 登录 | 会员 | 界面 | 简洁版本 | 在线 | 帮助
商都网教育宝典宝库

发表新主题 回复该主题
本主题被查看881次, 共1个帖子, 1页, 当前为第1页     选择页数: 1      跳转到第   上一主题   下一主题
标题: 再讨论类和结构
张小峰
超级版主
UID: 14
来自:
精华: 4
积分: 313
帖子: 285
注册: 2007-8-23 10:27:00
状态: 离线
威望: 8.00
金钱: 75.55 元
只看楼主 2007-09-19 11:57
再讨论类和结构
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,它就以引用的方式传递了。
#1  
发表新主题 回复该主题
本主题被查看881次, 共1个帖子, 1页, 当前为第1页     选择页数: 1      跳转到第







现在的时间是 2008-10-13 18:11:56

版权所有 商都网教育宝典
         Powered by Discuz!NT 1.0.6666    Copyright © 2001-2008 Comsenz Inc.
Processed in 0 seconds