微软已经使用结构如下规则:C#类VS结构
考虑定义一个类的结构,而不是如果 类型的实例是小的和普遍短命或通常嵌入在 其他物体。
不要定义的结构,除非该类型具有所有以下特征:
- 它在逻辑上表示单个值,类似于原始类型(整数,双,和等等)。
- 它的实例大小小于16个字节。
- 它是不可变的。
- 它不会经常被装箱。
据我了解,你当你想要一个价值型行为创建结构。当然,这可以让您在分配和传递给函数时复制开销。但你为什么要追随#2和#3?如果你的价值类型太大了会怎么样?此外,我不明白你为什么会将不可变类型作为值类型。如果类型是不可变的,那么最好通过引用来节省时间,因为无论如何它都不能被改变。
我问的原因是我在做一个游戏,其中对象具有像Vector2d类型的坐标,速度等属性。问题是,我应该使Vector2d不可变结构体(不需要大量额外的内存吗?),可变结构体(人们说它们是邪恶的)或者只是类(我将不得不始终调用vector.Clone(),否则我可能会无意间得到两个具有相同向量变量的对象)
_“如果你的值类型太大?”_根据MS,你应该使用*类* ... – gdoron
[为什么是可变结构邪恶?](http://stackoverflow.com/questions/441309/why-are-mutable-structs-evil) – GSerg
[你应该只根据你面对的实际问题提出实际的,可回答的问题。](http://stackoverflow.com/faq#dontask)那么你的实际题? –