C#中值类型和引用类型的区别.docVIP

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
c#中值类型和引用类型的区别 1. 值类型的数据存储在内存的栈中;引用类型的数据存储在内存的堆中,而内存单元中只存放堆中对象的 地址。 2. 值类型存取速度快,引用类型存取速度慢。 3. 值类型表示实际数据,引用类型表示指向存储在内存堆中的数据的指针或引用 4. 值类型继承自System.ValueType,引用类型继承自System.Object 5. 栈的内存分配是自动释放;而堆在.NET中会有GC来释放 6. 值类型的变量直接存放实际的数据,而引用类型的变量存放的则是数据的地址,即对象的引用。 7. 值类型变量直接把变量的值保存在堆栈中,引用类型的变量把实际数据的地址保存在堆栈中,而实际 数据则保存在堆中。注意,堆和堆栈是两个不同的概念,在内存中的存储位置也不相同,堆一般用于存储 可变长度的数据,如字符串类型;而堆栈则用于存储固定长度的数据,如整型类型的数据int(每个int变量 占用四个字节)。由数据存储的位置可以得知,当把一个值变量赋给另一个值变量时,会在堆栈中保存两 个完全相同的值;而把一个引用变量赋给另一个引用变量,则会在堆栈中保存对同一个堆位置的两个引用 ,即在堆栈中保存的是同一个堆的地址。在进行数据操作时,对于值类型,由于每个变量都有自己的值, 因此对一个变量的操作不会影响到其它变量;对于引用类型的变量,对一个变量的数据进行操作就是对这 个变量在堆中的数据进行操作,如果两个引用类型的变量引用同一个对象,实际含义就是它们在堆栈中保 存的堆的地址相同,因此对一个变量的操作就会影响到引用同一个对象的另一个变量。 C#中值类型和引用类型解析、本质区别有哪些?在C#中值类型的变量直接存储数据,而引用类型的变量持有的是数据的引用,数据存储在数据堆中。 常见的值类型数据有:整值型(整形,浮点型,十进制型),布尔类型,枚举类型; 引用类型有:接口,数组,Object类型,类,委托,字符串,null类型。 在C#中每种类型的存储方式有两种:1)分配在托管栈中;2)分配在托管堆中; 内存的分配有CLR管理(即公共语言运行时),这两种方法的区别是: 1)分配在托管栈中的变量会在创建它们的方法返回时自动释放,例如在一个方法中声明Char型的变量UserInput=C,当实例化它的方法结束时,UserInput变量在栈上占用的内存就会自动释放; 2)分配在托管堆中的变量并不会在创建它们的方法结束时释放内存,它们所占用的内存会被CLR中的垃圾回收机制释放。 看下面的代码: 1 static void Main(string[] args) 2 { 3 //当nStudent声明并赋值是,这时在托管栈上就会开辟一块内存来存储nStudent的值,当实例化nStudent的Main()方法结束时, 4 //nStudent在托管栈上占用的内存会自动释放。 5 int nStudent = 0; 6 //当声明strStuName时,这个时候“小明”存储在托管堆中,而托管栈中存储的是strStuName指向的引用。 7 string strStuName = 小明; 8 9 Console.WriteLine(学生的总数是{0},五号的名字是{1}, nStudent, strStuName); 10 Console.ReadKey(); 11 } 装箱和拆箱 当值类型的数据转换成引用类型时,CLR会先在托管堆配置一块内存,将值类型的数据复制到这块内存,然后再让托管栈上的引用类型的变量指向这块内存,这样的过程称为装箱。相反的话,有引用类型转换成值类型的话就称为拆箱。 一般情况下,.NET会主动的帮我们完成装箱操作,但是拆箱并非主动,我们必须知道拆箱对象的实力类型,然后明确的去执行拆箱操作。 1 int BirthdayNum = 1989; 2 object BoxBirthdayNum = BirthdayNum;//系统自动装箱 3 int nBirthdayNum = (int)BoxBirthdayNum;//明确数据类型的拆箱 因为花费了更多的时间,所以装箱和拆箱对程序的性能有一定的影响。 -------------------------------------------------------------------------------------------------------------------------------------- 类型推断 在C#中有两种类型的数据,一种是值类型,另一种是引用类型。 值类型包括:内置值类型、用户自定义值类型、和枚举,如 int,float bool 等,以及struct等。 引用类型包括接口类型、用户自定义的类、委托

文档评论(0)

rpv75l07 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档