c#中值类型和引用类型的区别

c#中值类型和引用类型的区别

ID:34722007

大小:70.18 KB

页数:4页

时间:2019-03-10

c#中值类型和引用类型的区别_第1页
c#中值类型和引用类型的区别_第2页
c#中值类型和引用类型的区别_第3页
c#中值类型和引用类型的区别_第4页
资源描述:

《c#中值类型和引用类型的区别》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、C#中值类型和引用类型的区别1.值类型的数据存储在内存的栈中;引用类型的数据存储在内存的堆中,而内存单元中只存放堆中对象的地址。2.值类型存取速度快,引用类型存取速度慢。3.值类型表示实际数据,引用类型表示指向存储在内存堆中的数据的指针或引用4.值类型继承自System.ValueType,引用类型继承自System.Object5.栈的内存分配是自动释放;而堆在.NET中会有GC来释放6.值类型的变量直接存放实际的数据,而引用类型的变量存放的则是数据的地址,即对象的引用。7. 值类型变量直接把变量的值保存在堆栈中,引用类型的变量把实际数

2、据的地址保存在堆栈中,而实际数据则保存在堆中。注意,堆和堆栈是两个不同的概念,在内存中的存储位置也不相同,堆一般用于存储可变长度的数据,如字符串类型;而堆栈则用于存储固定长度的数据,如整型类型的数据int(每个int变量占用四个字节)。由数据存储的位置可以得知,当把一个值变量赋给另一个值变量时,会在堆栈中保存两个完全相同的值;而把一个引用变量赋给另一个引用变量,则会在堆栈中保存对同一个堆位置的两个引用,即在堆栈中保存的是同一个堆的地址。在进行数据操作时,对于值类型,由于每个变量都有自己的值,因此对一个变量的操作不会影响到其它变量;对于引用

3、类型的变量,对一个变量的数据进行操作就是对这个变量在堆中的数据进行操作,如果两个引用类型的变量引用同一个对象,实际含义就是它们在堆栈中保存的堆的地址相同,因此对一个变量的操作就会影响到引用同一个对象的另一个变量。C#中值类型和引用类型解析、本质区别有哪些?在C#中值类型的变量直接存储数据,而引用类型的变量持有的是数据的引用,数据存储在数据堆中。常见的值类型数据有:整值型(整形,浮点型,十进制型),布尔类型,枚举类型;引用类型有:接口,数组,Object类型,类,委托,字符串,null类型。在C#中每种类型的存储方式有两种:1)分配在托管栈

4、中;2)分配在托管堆中;内存的分配有CLR管理(即公共语言运行时),这两种方法的区别是:1)分配在托管栈中的变量会在创建它们的方法返回时自动释放,例如在一个方法中声明Char型的变量UserInput=C,当实例化它的方法结束时,UserInput变量在栈上占用的内存就会自动释放;2)分配在托管堆中的变量并不会在创建它们的方法结束时释放内存,它们所占用的内存会被CLR中的垃圾回收机制释放。看下面的代码:1staticvoidMain(string[]args)2{3//当nStudent声明并赋值是,这时在托管栈上就会开辟一块内存来存储n

5、Student的值,当实例化nStudent的Main()方法结束时,4//nStudent在托管栈上占用的内存会自动释放。5intnStudent=0;6//当声明strStuName时,这个时候“小明”存储在托管堆中,而托管栈中存储的是strStuName指向的引用。7stringstrStuName="小明";89Console.WriteLine("学生的总数是{0},五号的名字是{1}",nStudent,strStuName);10Console.ReadKey();11}装箱和拆箱当值类型的数据转换成引用类型时,CLR会先在

6、托管堆配置一块内存,将值类型的数据复制到这块内存,然后再让托管栈上的引用类型的变量指向这块内存,这样的过程称为装箱。相反的话,有引用类型转换成值类型的话就称为拆箱。一般情况下,.NET会主动的帮我们完成装箱操作,但是拆箱并非主动,我们必须知道拆箱对象的实力类型,然后明确的去执行拆箱操作。1intBirthdayNum=1989;2objectBoxBirthdayNum=BirthdayNum;//系统自动装箱3intnBirthdayNum=(int)BoxBirthdayNum;//明确数据类型的拆箱因为花费了更多的时间,所以装箱和拆

7、箱对程序的性能有一定的影响。--------------------------------------------------------------------------------------------------------------------------------------类型推断在C#中有两种类型的数据,一种是值类型,另一种是引用类型。值类型包括:内置值类型、用户自定义值类型、和枚举,如int,floatbool等,以及struct等。引用类型包括接口类型、用户自定义的类、委托等。如string、DateTime、

8、数组等。值类型是存储在堆栈中,而引用类型是存储在托管堆上,C#程序首先被编译成IL程序,然后在托管执行。值类型直接从堆栈中里面取值,而引用类型必须要先从堆栈里面取出它的地址,再根据这个地址在堆

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。