值类型与引用类型的区别

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_37602383/article/details/78757467

值类型

struct结构,enum枚举

结构包括:

简单结构(int,char,float,double,bool.....),用户自定义的结构体,

引用类型
类,数组,接口,代理

类包括

object,string,用户自定义类

区别

(1)值类型存在栈上

引用类型储存在堆上

c#的值类型是为变量在栈上分配了一块内存,用于存储数据,而引用类型分为两部分,声明时只在栈上分配了一小部分内存, 堆上没分配,而new引用变量时,是在堆上分配了一块内存,存储的是栈上的内存地址。

引用类型在栈中存储一个引用,其实际的存储位置位于托管堆。简称引用类型部署在托管推上。而值类型总是分配在它声明 地方:作为字段时,跟随其所属的变量(实例)存储;作为局部变量时,存储在栈上。(栈的内存是自动释放的,堆内 是.NET中会由GC来自动释放)

2)引用类型可以派生出新的类型,而值类型不能

(3)引用类型可以包含null值,值类型不能(可空类型功能允许将 null 赋给值类型)


注意:struct是值类型,string和class是引用类型,string不需要new是因为想要语义化“引 用类型和值类型都继承自System.Object类。不同的是,几乎所有的引用类型都直接从System.Object继承,而值类型则继承其子类,即 直接继承System.ValueType。即System.ValueType本身是一个类类型,而不是值类型。其关键在于ValueType重写了Equals()方法,从而对值类型按照实例的值来比较,而不是引用地址来比较。

本文部分引用:http://blog.csdn.net/qiaoquan3/article/details/51202926 作者:HawkJony



猜你喜欢

转载自blog.csdn.net/m0_37602383/article/details/78757467