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

时间:2011-03-31 14:22:38

标签: c# pointers reference value-type

  

可能重复:
  What are the differences between value types and reference types in C#?

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

5 个答案:

答案 0 :(得分:17)

考虑两个变量:

SomeReferenceType x;
SomeValueType y;

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

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

这是一个非常简短的摘要 - 有关详细信息,请参阅Eric Lippert's blog post about value typesmy article。 (您可能也对我关于parameter passing的文章感兴趣,这篇文章是相关的,但并不完全相同。)

答案 1 :(得分:7)

如名称所示,值类型是存储在内存中的值;引用类型是(一种)指向对象(类,对象等)的指针

来自Microsoft

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

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

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

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

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

答案 2 :(得分:2)

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

来自MSDN

  

值类型是结构和   枚举。变量是   基于值类型直接包含   值。分配一个值类型   变量到另一个副本   包含的价值。这不同于   分配参考类型   变量,复制引用   对象但不是对象本身。   所有值类型都是隐式派生的   来自System.ValueType。不像   有了引用类型,你就不能   从值类型派生新类型。   但是,像引用类型,结构   可以实现接口。不像   引用类型,值类型不能   包含空值。然而   可空类型功能允许   要赋值为null的值类型

阅读本文:http://www.csharptocsharp.com/node/41

答案 3 :(得分:1)

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

您可以在MSDN中详细了解:http://msdn.microsoft.com/en-us/library/s1ax56ch.aspxhttp://msdn.microsoft.com/en-us/library/490f96s2.aspx

答案 4 :(得分:0)