值类型和引用类型之间的基本区别
可能重复:
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