Net复习笔记:第七部分:class和Struct

【多态】: 通过继承实现的不同对象调用相同的方法,表现出不同的行为,称之为多态

【class】

所有的类都最终继承自System.Object类,因此是一种引用类型

1.class是引用类型,继承自System.Object类;struct是值类型,继承自System.ValueType类,因此不具多态性。但是注意,System.ValueType是个引用类型。

2.从职能观点来看,class表现为行为;而struct常用于存储数据。

3.class支持继承,可以继承自类和接口;而struct没有继承性,struct不能从class继承,也不能作为class的基类,但struct支持接口继承

4.class可以声明无参构造函数,可以声明析构函数;而struct只能声明带参数构造函数,且不能声明析构函数。因此,struct没有自定义的默认无参构造函数,默认无参构造器只是简单地把所有值初始化为它们的0等价值

5.实例化时,class要使用new关键字;而struct可以不使用new关键字,如果不以new来实例化struct,则其所有的字段将处于未分配状态,直到所有字段完成初始化,否则引用未赋值的字段会导致编译错误。

6.class可以实抽象类(abstract),可以声明抽象函数;而struct为抽象,也不能声明抽象函数

7.class可以声明protected成员、virtual成员、sealed成员和override成员;而struct不可以,但是值得注意的是,struct可以重载System.Object的3个虚方法,Equals()、ToString()和GetHashTable()。

8.class的对象复制分为浅拷贝和深拷贝(该主题我们在本系列以后的主题中将重点讲述,本文不作详述),必须经过特别的方法来完成复制;而struct创建的对象复制简单,可以直接以等号连接即可。

9.class实例由垃圾回收机制来保证内存的回收处理;而struct变量使用完后立即自动解除内存分配。

作为参数传递时,class变量是以按址方式传递;而struct变量是以按值方式传递的。

10.作为参数传递时,class变量是以按址方式传递;而struct变量是以按值方式传递的。

我们应该考虑使用struct来代替class:

 

    实现一个主要用于存储数据的结构时,可以考虑struct。

    struct变量占有堆栈的空间,因此只适用于数据量相对小的场合。

    结构数组具有更高的效率。

    提供某些和非托管代码通信的兼容性。

posted @ 2014-01-23 16:47  瀚海行舟  阅读(100)  评论(0编辑  收藏  举报