这几个星期我一直在想这个问题。我知道结构是值类型,类是引用类型。让我感到困惑的是这两者在行为上的不同。
例如:如果我有一袋土豆,每个土豆的大小、形状和重量都不一样……包将是一个"类"/引用类型土豆应该是一个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
。