所以几周来我一直在努力解决这个问题。我知道结构是值类型,而类是引用类型。我感到困惑的是两者之间的行为差异。
例如:如果我有一袋土豆,每个土豆的大小、形状和重量都不同……袋子是“类”/引用类型土豆是“结构”/值类型
我的土豆可以是一个类,还是必须是一个结构,因为其中包含的值不同?
基本上,这个问题的答案将为我清除一切。
谢谢!
所以几周来我一直在努力解决这个问题。我知道结构是值类型,而类是引用类型。我感到困惑的是两者之间的行为差异。
例如:如果我有一袋土豆,每个土豆的大小、形状和重量都不同……袋子是“类”/引用类型土豆是“结构”/值类型
我的土豆可以是一个类,还是必须是一个结构,因为其中包含的值不同?
基本上,这个问题的答案将为我清除一切。
谢谢!
如果您跟踪的所有关于马铃薯的信息都是它们的大小、重量和形状,那么请回答这个问题——“如果两个马铃薯的大小、重量和形状相同,它们是否应该被认为是相同的?”。该问题的答案取决于您的问题域。
如果它们应该“相同”,那么您正在按值比较它们,并且(通常)可以/应该是值类型。如果它们不应该被视为“相同”,那么它们应该是引用类型。
如果你想取出一个Potato
并BagOfPotatoes
在其他类之间传递它,如果这些类要修改土豆,那么它应该是一个引用类型。
例如,BagOfPotatoes
传递到Chef.SortPotatoes(List<Potatoes> potatoes)
然后继续到Chef.SkinPotatoes(Potato potato)
厨师可能剥土豆皮的地方,设置Potato.IsSkinned
.
如果它是引用类型- 那么任何更改的值也将在BagOfPotatoes
. IEPotato.IsSkinned = true
如果它是一个值类型- 那么BagOfPotatoes
仍然会包含一个带有原始Potato
s 的包,即Potato.IsSkinned = false
这取决于您是否需要将马铃薯称为单个马铃薯,您将其扔在哪里,并且在其末尾仍然谈论相同的土豆泥(通过引用)。或者您是否只想谈论它的马铃薯类型(按价值)。
任何是 a 的东西都struct
可能是 a class
。两者的行为略有不同,但你的“土豆”当然可以是 aclass
而不是 a struct
。