值类型与引用类型的区别

1.值类型(ValueType)

值类型包括:数值类型,结构体,bool型,用户定义的结构体,枚举,可空类型。

值类型的变量直接存储数据,分配在托管栈中。变量会在创建它们的方法返回时自动释放,例如在一个方法中声明Char型的变量name=’C’,当实例化它的方法结束时,name变量在栈上占用的内存就会自动释放

C#的所有值类型均隐式派生自System.ValueType。

结构体:struct(直接派生于System.ValueType)。

数值类型:整型,sbyte(System.SByte的别 名),short(System.Int16),int(System.Int32),long(System.Int64),byte(System.Byte),ushort(System.UInt16),uint(System.UInt32),ulong(System.UInt64),char(System.Char)。

浮点型:float(System.Single),double(System.Double)。

财务计算的高精度decimal型:decimal(System.Decimal)。

bool型:bool(System.Boolean的别名)。

用户定义的结构体(派生于System.ValueType)。

枚举:enum(派生于System.Enum)。

可空类型(派生于System.Nullable<T>泛型结构体,T?实际上是System.Nullable<T>的别名


2.引用类型(ReferenceType)

引用类型包括:数组,用户定义的类、接口、委托,object,字符串,null类型,类。

引用类型的变量持有的是数据的引用,数据存储在数据堆,分配在托管堆中,变量并不会在创建它们的方法结束时释放内存,它们所占用的内存会被CLR中的垃圾回收机制释放。

数组(派生于System.Array)

用户需定义以下类型:

类:class(派生于System.Object);

接口:interface(接口不是一个“东西”,所以不存在派生于何处的问题。接口只是表示一种contract约定[contract])。

委托:delegate(派生于System.Delegate)。

object(System.Object的别名);

字符串:string(System.String的别名)。



图片发自简书App

图片发自简书App

图片发自简书App

图片发自简书App
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容