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



这几个星期我一直在想这个问题。我知道结构是值类型,类是引用类型。让我感到困惑的是这两者在行为上的不同。

例如

:如果我有一袋土豆,每个土豆的大小、形状和重量都不一样……包将是一个"类"/引用类型土豆应该是一个struct/value类型

我的土豆可以是一个类,或者它们必须是一个结构体,因为其中包含的值是不同的?

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

谢谢!

如果你所追踪的土豆只是它们的大小、重量和形状,那么回答这个问题——"如果两个土豆的相同大小、重量和形状,它们应该被认为是相同的吗?"这个问题的答案取决于你的问题领域。

如果它们应该是"相同的",那么你通过和(通常)可以/应该是值类型来比较它们。如果它们不应该被视为"相同",那么它们应该是引用类型。

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

例如,BagOfPotatoes被传递给Chef.SortPotatoes(List<Potatoes> potatoes),然后再传递给Chef.SkinPotatoes(Potato potato),厨师可以剥土豆皮,设置Potato.IsSkinned

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

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

这取决于你是否需要将马铃薯称为单个马铃薯,你把它扔在哪里,并且仍然在它的末尾谈论相同的土豆泥(通过引用)。或者你是否只想谈论土豆的类型它是(按值)

任何struct都可以变成class。两者的行为略有不同,但您的"土豆"当然可以是class而不是struct

最新更新