All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
PEAR--HTML_QuickForm与Smarty,的结合应用_php资料_编程技术
解答:如何使用PHP开发高效的WEB系统_php资料_编程技术
visual c++类中的多重继承
微软新版开发工具VS,2008,beta2功能定案_.net资料_编程技术
SQL循序渐进(21)更多的子查询_[SQL,Server教程]
用C#动态创建Access数据库_.net资料_编程技术
PHP将成为网站综合解决方案的重要角色_php资料_编程技术
Asp.Net生成静态页面实例代码_[Asp.Net教程]
sql server2005设置自动备份全过程_[SQL Server教程]
Response输出可以加批注的Excel_[Asp.Net教程]
Reading number is top 10 pictures
Household design of gorgeous series
中国女孩大胆自拍,显露完美身材
深圳的风光
A man's favorite things4
So beauty, will let you spray blood1
日本小萝莉2
传销的好处
Beautiful Japanese beauty(漂亮的日本美女)3
美丽的少女1
Exquisite decoration is not paying too much4
Download software ranking
软件工程思想
Call Of Duty2
网页特效实例大全
asp.netWeb服务器高级编程
好色的外科大夫
功夫熊猫2(上集)
仙剑奇侠传98硬盘WINXP版
致我们终将逝去的青春
jdk1.6 for windows
卡丁车单机版
aaa published in(发表于) 2013/12/18 8:06:57 Edit(编辑)
你必须知道的.NET之class和struct_.net资料_编程技术

你必须知道的.NET之class和struct_.net资料_编程技术

你必须知道的.NET之class和struct_.net资料_编程技术-你的首页-uuhomepage.com
  1. 引言


  提起class和struct,我们首先的感觉是语法几乎相同,待遇却翻天复地。历史将接力棒由面向过程编程传到面向对象编程,class和struct也背负着各自的命运前行。在我认为,struct英雄迟暮,class天下独行,最本质的区别是class是引用类型,而struct是值类型,它们在内存中的分配情况有所区别。由此产生的一系列差异性,本文将做以全面讨论。


  2. 基本概念


  2.1. 什么是class?


  class(类)是面向对象编程的基本概念,是一种自定义数据结构类型,通常包含字段、属性、方法、属性、构造函数、索引器、操作符等。因为是基本的概念,所以不必在此详细描述,读者可以查询相关概念了解。我们重点强调的是.NET中,所有的类都最终继承自System.Object类,因此是一种引用类型,也就是说,new一个类的实例时,对象保存了该实例实际数据的引用地址,而对象的值保存在托管堆(managed heap)中。


  2.2. 什么是struct?


  struct(结构)是一种值类型,用于将一组相关的信息变量组织为一个单一的变量实体 。所有的结构都继承自System.ValueType类,因此是一种值类型,也就是说,struct实例分配在线程的堆栈(stack)上,它本身存储了值,而不包含指向该值的指针。所以在使用struct时,我们可以将其当作int、char这样的基本类型类对待。


你必须知道的.NET之class和struct


  3. 相同点,不同点


  相同点:语法类似。


  不同点:


  ·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变量占有堆栈的空间,因此只适用于数据量相对小的场合。


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


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


  所有这些是struct有一席之地的理由,当然也许还有其他的更多说法,只是我不知道罢了:-)


  4. 经典示例


  4.1 小菜一碟


  下面以示例为说明,来阐述本文的基本规则,详细见注释内容。


  (1)定义接口


interface IPerson
{
void GetSex();
}




添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.