值类型与引用类型

Posted 乐在跑途

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了值类型与引用类型相关的知识,希望对你有一定的参考价值。

1、值类型变量与引用类型变量

  从概念上看,值类型直接存储其值,而引用类型存储对其值的引用。  

  声明一个值类型变量,编译器在内存的栈上分配一个空间,这个空间对应着该值类型变量,空间里存储的就是该变量的值。

  新建一个引用类型的变量,内存的栈上存放的是实际引用类型变量的值或数据的地址,实际的数据则保存在堆中。

2、值类型与引用类型都有哪些?

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

  • 结构体:struct(直接派生于System.ValueType);
  • 数值类型:
  1. 整型: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);
  2. 浮点型:float(System.Single),double(System.Double);
  3. 用于财务计算的高精度decimal型:decimal(System.Decimal)。
  • bool型:bool(System.Boolean的别名);
  • 用户定义的结构体(派生于System.ValueType)。
  • 枚举:enum(派生于System.Enum);
  • 可空类型(派生于System.Nullable<T>泛型结构体,T?实际上是System.Nullable<T>的别名)。

C#有以下一些引用类型:

  • 数组(派生于System.Array)
  • 用户用定义的以下类型:
  1. 类:class(派生于System.Object);
  2. 接口:interface(接口不是一个“东西”,所以不存在派生于何处的问题。Anders在《C# Programming Language》中说,接口只是表示一种约定[contract]);
  3. 委托:delegate(派生于System.Delegate);
  • object(System.Object的别名);
  • 字符串:string(System.String的别名)。

以上是关于值类型与引用类型的主要内容,如果未能解决你的问题,请参考以下文章

Swift 中的值类型与引用类型

值类型与引用类型

值类型与引用类型

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

值类型和引用类型的区别

c#中值类型与引用类型的值传递与引用传递