在C#中,使用值类型与引用类型

Naw*_*waz 10 c# class-design value-type reference-type

我的问题是:

  • 我们什么时候应该使用值类型和引用类型?
  • 一个优于其他的优点和缺点是什么?
  • 如果在任何地方使用引用类型怎么办 它有什么危害吗?

还请讨论每个的优点和缺点.我也想了解这一点.

SLa*_*aks 9

您应该为表示值的小型不可变类型使用值类型.
永远不要制作可变的结构.

对于其他一切,请使用引用类型.


Ode*_*ded 7

对于不具有自己标识的不可变项使用值类型(1为1),对其他事物使用引用类型.

  • 字符串应该有身份吗?:) (5认同)

Rep*_*Man 6

对此似乎有很多困惑,Jon Skeet 在他的书“C# In Depth, 2nd Ed”中很好地澄清了这一点。(第 2.3 节)。

我个人的方法(可能正确也可能不正确)是仅使用结构/枚举(值类型)来表示我知道我将在某种逻辑或数学运算中经常使用的轻量级原子数据结构 - 想想Point,等等。

这样我认为我可以避免垃圾收集性能损失。然而,Jon 在他书中的那部分指出,没有真正的保证,尤其是在运行时的新版本中,是否会在堆栈中出现某些内容。

所以我最好的答案是谨慎使用结构之类的东西,并且如果你使用它们,请非常清楚你为什么要使用它们。注意过早的优化。如果你能拿到一份副本,请阅读 Jon 书中的那部分,因为他很好地阐明了整个主题。

相关:何时使用结构?