值类型和引用类型之间的基本区别

可能重复:
C#中的值类型和引用类型有什么区别?

值类型和重新引用类型之间的基本差异是什么

考虑两个变量:

SomeReferenceType x; SomeValueType y; 

x的值是一个引用 – 它将为null或对象的引用,该对象本身是SomeReferenceType或派生类的实例。 x的值本身不是对象。

y的值是数据本身 – 如果SomeValueType有三个字段, y的值将直接包含这些字段。

这是一个非常简短的总结 – 请参阅Eric Lippert关于价值类型的博客文章以及我的文章以获取更多信息。 (您可能也对我关于参数传递的文章感兴趣,这篇文章是相关的,但不完全相同。)

顾名思义,值类型是存储在内存中的值; 引用类型是(一种)指向对象的指针(类,对象等……)

来自微软 :

如果数据类型将数据保存在其自己的内存分配中,则该数据类型是值类型。 引用类型包含指向保存数据的另一个内存位置的指针。

价值类型
值类型包括以下内容:

  • 所有数字数据类型
  • 布尔值,字符和日期
  • 所有结构,即使其成员是引用类型
  • 枚举,因为它们的基础类型始终是SByte,Short,Integer,Long,Byte,UShort,UInteger或ULong

参考类型
参考类型包括以下内容:

  • 所有数组,即使它们的元素是值类型
  • 类类型,例如Form
  • 代表

引用类型的变量(称为对象)存储对实际数据的引用,有关详细信息,请参见此处 。 它们包括类,接口和委托。

来自MSDN :

值类型是结构和枚举。 基于值类型的变量直接包含值。 将一个值类型变量分配给另一个值复制包含的值。 这与引用类型变量的赋值不同,引用类型变量复制对象的引用而不是对象本身。 所有值类型都是从System.ValueType隐式派生的。 与引用类型不同,您无法从值类型派生新类型。 但是,与引用类型一样,结构可以实现接口。 与引用类型不同,值类型不能包含空值。 但是,可空类型function允许将值类型分配给null

请阅读: http : //www.csharptocsharp.com/node/41

当您拥有值类型的变量时,该变量直接保存一个值。 如果将其分配给另一个变量,则直接复制该值。 当变量属于引用类型时,它不直接保存值,而是指向值的引用(指针)。 复制变量时,不要复制它指向的值,而是复制引用(指针)。

您可以在MSDN中阅读更多相关信息: http : //msdn.microsoft.com/en-us/library/s1ax56ch.aspx和http://msdn.microsoft.com/en-us/library/490f96s2.aspx

您在这里: C#Concepts:Value vs Reference Types