傻傻地问:C#中的类和结构到底不同在哪里?

yestoall 2002-12-04 04:20:51
我知识有限,只知道类和结构地相同点:
1、可以被创建在堆或堆栈上;
2、元素地默认访问为私有的;
3、元素有默认值;
4、均可以定义方法;
5、均可以包含构造函数和析构函数。

请各位大侠指点一下,类和结构的不同点在哪里?
...全文
44 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yestoall 2002-12-05
  • 打赏
  • 举报
回复
本贴已结。
yarshray、TheAres各得10分。
再次致谢!
TheAres 2002-12-04
  • 打赏
  • 举报
回复
真想念老一辈的MVP在的时候的C#论坛啊...

>>1、可以被创建在堆或堆栈上;
对头. 但是有些不一样.比如两个结构a,b, a=b以后是拷贝了两段内存,而类的对象a,b, a=b 只是一段.


>>2、元素地默认访问为私有的;
对头
>>3、元素有默认值;
都没有.(也可能我们说的不是一个东西,你再详细说说).

>>4、均可以定义方法;
对头.

>>5、均可以包含构造函数和析构函数。
结构有构造函数,但是不能是没有任何参数的构造函数.(下面的代码出错)
public struct A
{
public int a;
public int b;
A()
{
a = 0;
b = 0;
}
}

结构不能有析构函数。(下面的代码出错)
public struct A
{
public int a;
public int b;
public A(int aa, int bb)
{
a = 0;
b = 0;
}

public ~A()
{
}
}

最后,我补充一些我知道的东西.
1.结构不支持继承.
2.对于大的结构体,在作为参数传递时,如果(不是必须)能使用ref,尽量使用,因为这样传递过去的是地址,而不是一个拷贝.但是这是就可以改变结构体的值了.
3,结构体一个非常由于的地方,就是在和(unsafe)代码交互时.它指定字段在内存中的分布,你可以参考StructLayout的一些帮助.

To :shems(流氓猪)
4.>>听说在Java里面没有结构,不知是不是真的.
是真的.Java中是通过类和接口来实现的.
5.>>如果是真的话,为什么C#还会保留结构呢?
可能和上面的3有关吧.
shems 2002-12-04
  • 打赏
  • 举报
回复
这个,好像不能说谁更强大吧……
类和结构几乎没有什么不同,根本的差别只在于类是引用类型,结构是值类型。
引用类型和值类型的区别,相信不用我说了吧。呵呵……
不过在C#里我几乎没用过结构,全部都用类,结构要说有优点的话,可能就是性能上的吧。
听说在Java里面没有结构,不知是不是真的。如果是真的话,为什么C#还会保留结构呢?只是因为要继承C、C++吗?
如果我有什么说错了,请大家指正。我很菜的说。
yarshray 2002-12-04
  • 打赏
  • 举报
回复
概念都不一样

使用范围当然也不一样.属性的话在类里使用,类是引用类型,数据放在

堆上.值类型在堆栈中分配.
yarshray 2002-12-04
  • 打赏
  • 举报
回复
参考该贴我今天早上答的

http://expert.csdn.net/Expert/topic/1230/1230416.xml?temp=.8882257
yestoall 2002-12-04
  • 打赏
  • 举报
回复
对!
我要问的就是哪里强大?
kalven 2002-12-04
  • 打赏
  • 举报
回复
structure value型
class reference 型
xhan2000 2002-12-04
  • 打赏
  • 举报
回复
类要强大得多


结构可以看成简化的类

110,532

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧