结构和类/值类型与引用类型

时间:2013-06-05 12:31:46

标签: c#

所以我一直试图让我的头脑周围几周。我理解结构是值类型,并且类是引用类型。我感到困惑的是两者之间的行为差​​异。

例如: 如果我有一袋土豆,每个土豆的大小,形状和重量都不同...... 该包将是“类”/参考类型 土豆将是'结构'/值类型

我的土豆可以成为一个类,还是必须是一个结构,因为其中包含的值是不同的?

基本上,这个问题的答案将为我清除一切。

谢谢!

3 个答案:

答案 0 :(得分:5)

如果您追踪土豆的大小,重量和形状,请回答问题 - "如果两个土豆的大小,重量和形状相同相同,他们应该被认为是一样的吗?"。该问题的答案取决于您的问题域。

如果它们应该是相同的",那么您可以通过进行比较,并且(通常)可以/应该是值类型。如果不应将它们视为"相同的",那么它们应该是引用类型。

答案 1 :(得分:1)

如果你想从Potato中取出BagOfPotatoes并在其他类之间传递,如果这些类要修改马铃薯,那么它应该是一个引用类型。

例如,BagOfPotatoes传递给Chef.SortPotatoes(List<Potatoes> potatoes),然后转到Chef.SkinPotatoes(Potato potato),厨师可以在那里涂抹土豆,设置Potato.IsSkinned

  • 如果是引用类型 - 那么更改的任何值也会在BagOfPotatoes中更改。即Potato.IsSkinned = true

  • 如果是值类型 - 那么BagOfPotatoes仍会包含原始Potato s的包,即Potato.IsSkinned = false

它取决于你是否需要将马铃薯称为个别马铃薯,你可以在那里吃掉它,并且仍然在它的末尾谈论同样的土豆泥(< em>通过引用)。或者您是否只想谈论它的马铃薯类型按值)。

答案 2 :(得分:0)

struct的任何内容都可以是class。这两者的行为略有不同,但你的“土豆”当然可以是class而不是struct