黑马程序员技术交流社区

标题: 类和结构的区别? [打印本页]

作者: 翁金鹏    时间: 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