黑马程序员技术交流社区
标题:
类和结构的区别?
[打印本页]
作者:
翁金鹏
时间:
2012-4-11 07:53
标题:
类和结构的区别?
类和结构的区别?
说详细 最后举例
作者:
张云静
时间:
2012-4-11 08:48
区别:
类:
类是引用类型在堆上分配,类的实例进行赋值只是复制了引用,都指向同一段实际对象分配的内存
类有构造和析构函数
类可以继承和被继承
结构:
结构是值类型在栈上分配(虽然栈的访问速度比较堆要快,但栈的资源有限放),结构的赋值将分配产生一个新的对象。
结构没有构造函数,但可以添加。结构没有析构函数
结构不可以继承自另一个结构或被继承,但和类一样可以继承自接口
作者:
刘真
时间:
2012-4-11 10:07
本帖最后由 刘真 于 2012-4-11 10:15 编辑
类和结构的区别:
1、值类型与引用类型
结构是值类型
:值类型在
堆栈
上分配地址,所有的基类型都是结构类型,例如:int 对应System.int32 结构,string 对应 system.string 结构 ,通过使用结构可以创建更多的值类型 ;
类是引用类型
:引用类型在
堆
上分配地址 ;
堆栈的执行效率要比堆的执行效率高,可是堆栈的资源有限,不适合处理大的逻辑复杂的对象。所以结构处理作为基类型对待的小对象,而类处理某个商业逻辑。
2、继承性
结构
:不能从另外一个结构或者类继承,本身也不能被继承,虽然结构没有明确的用sealed声明,可是结构是隐式的sealed ;
类
:完全可扩展的,除非显示的声明sealed 否则类可以继承其他类和接口,自身也能被继承 ;
注:虽然结构不能被继承 可是结构能够继承接口,方法和类继承接口一样 。
3、内部结构:
结构
类
没有默认的构造函数和析构函数,但可以添加构造函数
有默认的构造函数和析构函数
没有 abstract 和 sealed(因为不能继承)
可以使用 abstract 和 sealed
可以不使用new 初始化
必须使用new 初始化
在结构中初始化实例字段是错误的
4.如何选择结构还是类
1. 堆栈的空间有限,对于大量的逻辑的对象,创建类要比创建结构好一些;
2. 结构表示如点、矩形和颜色这样的轻量对象,例如,如果声明一个含有 1000 个点对象的数组,则将为引用每个对象分配附加的内存,在此情况下,结构的成本较低;
3. 在表现抽象和多级别的对象层次时,类是最好的选择;
4. 大多数情况下该类型只是一些数据时,结构是最佳的选择 。
作者:
郭耀强
时间:
2012-4-11 10:21
我在博客发表的一个博客http://blog.sina.com.cn/s/articlelist_2506227675_0_1.html
作者:
★心秒★
时间:
2012-4-11 20:55
结构体:(简单的可以看作是一种数据类型)
语法:
访问修饰符 struct 结构名
{
定义结构成员
}
至于类,我想你应该很清楚吧!! 比较大的区别就是,结构不用实例化,而类,是需要实例化才能使用里面的字段、属性与方法的!!
作者:
马跃
时间:
2012-4-11 21:06
类应该说只是一个逻辑上的集合,而结构体就是你自己创造的一个对象,可以有自己的属性和方法等。
详细可以看这里:http://www.cftea.com/c/2008/03/JHB3MJM8DYGS0JJ9.asp
作者:
黄国钢
时间:
2012-4-11 21:31
关于类和结构的区别上面已经说的差不多了,我这儿再补充一下:
结构体的定义是:有些数据既是相互关联的,又共同描述一个完整事物,如:一个学生的整体信息,学号、姓名、性别等。而类则使用在需要比较有层次的数据上面。
类是面向对象的程序设计的基本构成模块。从定义上讲,类是一种数据结构,这种数据结构可能包含数据成员、函数成员以及其它的嵌套类型
为什么要用结构:
1)比如我们为了存储一个人的信息时,就要声明n组变量,麻烦。
2)存储一个人信息的这几个变量间没有关系,容易记乱。
语法:
访问修饰符 struct 结构名
{
定义结构成员;
}
MSDN上也有struct的备注:
结构还可以包含构造函数、常量、字段、方法、属性、索引器、运算符、事件和嵌套类型,但如果同时需要上述几种成员,则应当考虑改为使用类作为类型。
结构可以实现接口,但它们无法继承另一个结构。因此,结构成员无法声明为 protected。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2