黑马程序员技术交流社区

标题: 在 dotnet中类(class)与结构(struct)的异同? [打印本页]

作者: 盘晟    时间: 2013-5-23 01:15
标题: 在 dotnet中类(class)与结构(struct)的异同?
本帖最后由 盘晟 于 2013-6-18 21:36 编辑

如题!
作者: 许庭洲    时间: 2013-5-23 06:13
1. Class可以被实例化,属于引用类型,是分配在内存的堆上的;
2. 类是引用传递的;
3. Struct属于值类型,是分配在内存的栈上的;
4. 结构体是复制传递的.
作者: huaruibang    时间: 2013-5-23 07:14
楼上说的 很详细,关于 值类型 和 引用类型区别 应该是 值类型和 引用类型的区别,
举个简单的例子 定义 a=1;b=0; 然后 将 b=a;a=2; 这时候 a=2,b=1;(→_→ 这是 值类型)
手动 定义一个 引用类型,例如 Class Test{ public int Value{ set;get;} }
Test a=new Test{Value =1 };  Test b=new Test{Value=0};   将 b=a;a= new Test{Value =2 }; 这时候 a.Value=2,b.Value=2; (只是引用类型)
作者: 黑马—杨磊    时间: 2013-5-26 15:36
Class可以被实例化,属于引用类型,是分配在内存的堆上的,Struct属于值类型,是分配在内存的栈上的.

作者: 吃肉的小浣熊    时间: 2013-5-26 20:38
结构不能声明默认构造函数(没有参数的构造函数)或析构函数。结构的副本由编译器自动创建和销毁,因此不需要使用默认构造函数和析构函数。实际上,编译器通过为所有字段赋予默认值(参见默认值表)来实现默认构造函数。结构不能从类或其他结构继承。
结构是值类型 -- 如果从结构创建一个对象并将该对象赋给某个变量,变量则包含结构的全部值。复制包含结构的变量时,将复制所有数据,对新副本所做的任何修改都不会改变旧副 本的数据。由于结构不使用引用,因此结构没有标识 -- 具有相同数据的两个值类型实例是无法区分的。C# 中的所有值类型本质上都继承自 ValueType,后者继承自 Object。编译器可以在一个称为装箱的过程中将值类型转换为引用类型。

作者: 余尚勇    时间: 2013-5-27 11:13
从职能观点来看,class表现为行为;而struct常用于存储数据。class支持继承,可以继承自类和接口;而struct没有继承性,struct不能从class继承,也不能作为class的基类,但struct支持接口继承。class可以声明无参构造函数,可以声明析构函数;而struct只能声明带参数构造函数,且不能声明析构函数。因此,struct没有自定义的默认无参构造函数,默认无参构造器只是简单地把所有值初始化为它们的0等价值。






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2