ASP.NET中class与struct的区别
2009-08-03 10:14
246 查看
相同点,不同点
相同点:语法类似。
不同点:
·class是引用类型,继承自System.Object类;struct是值类型,继承自System.ValueType类,因此不具多
态性。但是注意,System.ValueType是个引用类型。
·从职能观点来看,class表现为行为;而struct常用于存储数据。
·class支持继承,可以继承自类和接口;而struct没有继承性,struct不能从class继承,也不能作为class
的基类,但struct支持接口继承(记得吗,《第二回:对抽象编程:接口和抽象类》也做过讨论)
·class可以声明无参构造函数,可以声明析构函数;而struct只能声明带参数构造函数,且不能声明析构函
数。因此,struct没有自定义的默认无参构造函数,默认无参构造器只是简单地把所有值初始化为它们的0等价
值
·实例化时,class要使用new关键字;而struct可以不使用new关键字,struct在声明时就进行了初始化过程
,所有的成员变量均默认为0或null。
·class可以实抽象类(abstract),可以声明抽象函数;而struct为抽象,也不能声明抽象函数。
·class可以声明protected成员、virtual成员、sealed成员和override成员;而struct不可以,但是值得注
意的是,struct可以重载System.Object的3个虚方法,Equals()、ToString()和GetHashTable()。
·class的对象复制分为浅拷贝和深拷贝(该主题我们在本系列以后的主题中将重点讲述,本文不作详述),
必须经过特别的方法来完成复制;而struct创建的对象复制简单,可以直接以等号连接即可。
·class实例由垃圾回收机制来保证内存的回收处理;而struct变量使用完后立即自动解除内存分配。
·作为参数传递时,class变量是以按址方式传递;而struct变量是以按值方式传递的。
我们可以简单的理解,class是一个可以动的机器,有行为,有多态,有继承;而struct就是个零件箱,组合
了不同结构的零件。其实,class和struct最本质的区别就在于class是引用类型,内存分配于托管堆;而struct
是值类型,内存分配于线程的堆栈上。由此差异,导致了上述所有的不同点,所以只有深刻的理解内存分配的相
关内容,才能更好的驾驭。本系列将再以后的内容中,将引用类型和值类型做以深入的比较和探讨,敬请关注。
当然正如本文标题描述的一样,使用class基本可以替代struct的任何场合,class后来居上。虽然在某些方面
struct有性能方面的优势,但是在面向对象编程里,基本是class横行的天下。
那么,有人不免会提出,既然class几乎可以完全替代struct来实现所有的功能,那么struct还有存在的必
要吗?答案是,至少在以下情况下,鉴于性能上的考虑,我们应该考虑使用struct来代替class:
·实现一个主要用于存储数据的结构时,可以考虑struct。
·struct变量占有堆栈的空间,因此只适用于数据量相对小的场合。
·结构数组具有更高的效率。
·提供某些和非托管代码通信的兼容性。
相同点:语法类似。
不同点:
·class是引用类型,继承自System.Object类;struct是值类型,继承自System.ValueType类,因此不具多
态性。但是注意,System.ValueType是个引用类型。
·从职能观点来看,class表现为行为;而struct常用于存储数据。
·class支持继承,可以继承自类和接口;而struct没有继承性,struct不能从class继承,也不能作为class
的基类,但struct支持接口继承(记得吗,《第二回:对抽象编程:接口和抽象类》也做过讨论)
·class可以声明无参构造函数,可以声明析构函数;而struct只能声明带参数构造函数,且不能声明析构函
数。因此,struct没有自定义的默认无参构造函数,默认无参构造器只是简单地把所有值初始化为它们的0等价
值
·实例化时,class要使用new关键字;而struct可以不使用new关键字,struct在声明时就进行了初始化过程
,所有的成员变量均默认为0或null。
·class可以实抽象类(abstract),可以声明抽象函数;而struct为抽象,也不能声明抽象函数。
·class可以声明protected成员、virtual成员、sealed成员和override成员;而struct不可以,但是值得注
意的是,struct可以重载System.Object的3个虚方法,Equals()、ToString()和GetHashTable()。
·class的对象复制分为浅拷贝和深拷贝(该主题我们在本系列以后的主题中将重点讲述,本文不作详述),
必须经过特别的方法来完成复制;而struct创建的对象复制简单,可以直接以等号连接即可。
·class实例由垃圾回收机制来保证内存的回收处理;而struct变量使用完后立即自动解除内存分配。
·作为参数传递时,class变量是以按址方式传递;而struct变量是以按值方式传递的。
我们可以简单的理解,class是一个可以动的机器,有行为,有多态,有继承;而struct就是个零件箱,组合
了不同结构的零件。其实,class和struct最本质的区别就在于class是引用类型,内存分配于托管堆;而struct
是值类型,内存分配于线程的堆栈上。由此差异,导致了上述所有的不同点,所以只有深刻的理解内存分配的相
关内容,才能更好的驾驭。本系列将再以后的内容中,将引用类型和值类型做以深入的比较和探讨,敬请关注。
当然正如本文标题描述的一样,使用class基本可以替代struct的任何场合,class后来居上。虽然在某些方面
struct有性能方面的优势,但是在面向对象编程里,基本是class横行的天下。
那么,有人不免会提出,既然class几乎可以完全替代struct来实现所有的功能,那么struct还有存在的必
要吗?答案是,至少在以下情况下,鉴于性能上的考虑,我们应该考虑使用struct来代替class:
·实现一个主要用于存储数据的结构时,可以考虑struct。
·struct变量占有堆栈的空间,因此只适用于数据量相对小的场合。
·结构数组具有更高的效率。
·提供某些和非托管代码通信的兼容性。
相关文章推荐
- NET中class与struct的区别简析
- Asp.Net页面中Class和CssClass的区别
- asp.net中class和cssclass区别 (引用)
- .NET中class与struct的区别简析
- asp.net控件的CssClass 中的 visible和hidden的区别
- .NET技术:.NET中class和struct的区别
- .NET中class和struct的区别
- ASP.NET中get方法和post方法的区别
- Asp.Net中String.Empty、null和""的区别
- c++ struct与class的区别
- class与struct的区别与联系
- struct和class区别
- ASP.NET与ASP的区别
- ASP.NET入门(class0612)
- ASP.Net 后台代码更改 前台控件class
- C++ class和struct的区别
- asp.net 抽象方法和虚方法的用法区别,用Global类重写Application_BeginRequest等方法为例子
- struct和class的区别
- ASP.NET中Get和Post的用法 Request.QueryString,Request.Form,Request.Params的区别
- [转]c# asp.net 新建项目与新建网站区别