版权声明:本文为博主原创文章,未经博主允许不得转载。 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