值类型与引用类型
Posted 乐在跑途
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了值类型与引用类型相关的知识,希望对你有一定的参考价值。
1、值类型变量与引用类型变量
从概念上看,值类型直接存储其值,而引用类型存储对其值的引用。
声明一个值类型变量,编译器在内存的栈上分配一个空间,这个空间对应着该值类型变量,空间里存储的就是该变量的值。
新建一个引用类型的变量,内存的栈上存放的是实际引用类型变量的值或数据的地址,实际的数据则保存在堆中。
2、值类型与引用类型都有哪些?
值类型: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>的别名)。
C#有以下一些引用类型:
- 数组(派生于System.Array)
- 用户用定义的以下类型:
- 类:class(派生于System.Object);
- 接口:interface(接口不是一个“东西”,所以不存在派生于何处的问题。Anders在《C# Programming Language》中说,接口只是表示一种约定[contract]);
- 委托:delegate(派生于System.Delegate);
- object(System.Object的别名);
- 字符串:string(System.String的别名)。
以上是关于值类型与引用类型的主要内容,如果未能解决你的问题,请参考以下文章