A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 翁金鹏 中级黑马   /  2012-4-11 07:53  /  1958 人查看  /  6 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

类和结构的区别?
说详细 最后举例

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

6 个回复

倒序浏览
区别:
类:
类是引用类型在堆上分配,类的实例进行赋值只是复制了引用,都指向同一段实际对象分配的内存
类有构造和析构函数
类可以继承和被继承

结构:
结构是值类型在栈上分配(虽然栈的访问速度比较堆要快,但栈的资源有限放),结构的赋值将分配产生一个新的对象。
结构没有构造函数,但可以添加。结构没有析构函数
结构不可以继承自另一个结构或被继承,但和类一样可以继承自接口

评分

参与人数 1技术分 +2 收起 理由
宋天琪 + 2

查看全部评分

回复 使用道具 举报
本帖最后由 刘真 于 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. 大多数情况下该类型只是一些数据时,结构是最佳的选择 。



评分

参与人数 1技术分 +2 收起 理由
宋天琪 + 2

查看全部评分

回复 使用道具 举报
我在博客发表的一个博客http://blog.sina.com.cn/s/articlelist_2506227675_0_1.html

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
结构体:(简单的可以看作是一种数据类型)
语法:
访问修饰符 struct 结构名
{
        定义结构成员
}


至于类,我想你应该很清楚吧!!   比较大的区别就是,结构不用实例化,而类,是需要实例化才能使用里面的字段、属性与方法的!!

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
类应该说只是一个逻辑上的集合,而结构体就是你自己创造的一个对象,可以有自己的属性和方法等。
详细可以看这里:http://www.cftea.com/c/2008/03/JHB3MJM8DYGS0JJ9.asp

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
关于类和结构的区别上面已经说的差不多了,我这儿再补充一下:
结构体的定义是:有些数据既是相互关联的,又共同描述一个完整事物,如:一个学生的整体信息,学号、姓名、性别等。而类则使用在需要比较有层次的数据上面。
类是面向对象的程序设计的基本构成模块。从定义上讲,类是一种数据结构,这种数据结构可能包含数据成员、函数成员以及其它的嵌套类型
为什么要用结构:
1)比如我们为了存储一个人的信息时,就要声明n组变量,麻烦。
2)存储一个人信息的这几个变量间没有关系,容易记乱。
语法:
访问修饰符 struct 结构名

        定义结构成员;


MSDN上也有struct的备注:

结构还可以包含构造函数、常量、字段、方法、属性、索引器、运算符、事件和嵌套类型,但如果同时需要上述几种成员,则应当考虑改为使用类作为类型。

结构可以实现接口,但它们无法继承另一个结构。因此,结构成员无法声明为 protected。


评分

参与人数 1技术分 +2 收起 理由
宋天琪 + 2

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马