黑马程序员 结构和类的区别与联系

---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ----------------------

类和结构的区别:

1. 一个是引用类型一个是值类型

Class是引用类型,继承自System.Object

Struct是值类型,继承自System.ValueType类,因此不具有多态性

因为结构是值类型,所以结构之间赋值可以创建新的结构,复制包含结构的变量时,将复制所有的数据,对新的副本所作的修改都不会改变旧副本的数据,而类是引用类型,类之间的赋值只是复制引用。

2. 继承性的区别

Class支持继承,可以继承自类和接口,是完全可扩展的,除非声明sealed。否则类可以继承自其它的类的接口,自身也能被继承。

Struct没有继承性,不能从另外一个结构或者类继承,本身也不能被继承,虽然结构没有明确地用sealed声明,但是结构是隐式的sealedStruct支持接口继承。

3. 内部结构:

结构(Struct)类(Class)

没有默认的(无参数)构造函数,但是可以添加构造函数,结构可以声明构造函数,

但是他们必须是带参数的。

有默认的构造函数
没有析构函数有析构函数
没有abstract和sealed(因为不能继承)可以有abstract和sealed
不能有protected修饰符,不可以声明protected,virtual,sealed和override成员可以声明protected,virtual,sealed,override成员
可以不使用new初始化必须使用new初始化
在结构中实例化字段是错误的 
Struct变量使用完之后就自动解除内存分配Class实例有垃圾回收机制来保证内存的回收处理
Struct创建的对象复制简单,直接以等号连接即可Class对象复制分为浅复制和深复制,必须经过特别的方法来完成复制

我们可以简单地理解为class是一个可以动的机器,有行为,有多台,有继承,而struct是一个零件箱,组合了不同结构的零件,其实class和struct最本质的区别在于class是引用类型,内存分配在托管堆,而struct是值类型,内存分配在线程堆栈上,此差异导致了上述的所有的不同。

4. 如何选择类和结构

(1) 实现一个主要勇于存储数据的结构时,可以考虑结构

(2) Struct变量占用堆栈的空间,因此适用于数据量相对小的场合,堆栈的空间有限,对于大量的逻辑的对象,创建类要比创建结构好一些。

(3) 结构数组具有更高的效率

(4) 结构表示如点,矩形和颜色这样轻量的对象,例如,如果声明一个含有1000个点的对象数组,则将为引用每个对象分配附加的内存,在此情况下,结构的成本较低。

(5) 在表现抽象和多级别的对象层次时,类是最好的选择

(6) 在大多数情况下,该类型只是一些数据时,结构师最佳的选择。

 

 

---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ----------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值