Microsoft 对使用 struct 有以下规则:
如果类型的实例很小且通常短暂存在或通常嵌入在其他对象中,请考虑定义结构而不是类。
除非类型具有以下所有特征,否则不要定义结构:
- 它在逻辑上表示单个值,类似于原始类型(整数、双精度等)。
- 它的实例大小小于 16 字节。
- 它是不可变的。
- 它不必经常装箱。
据我了解,当你想要一个值类型的行为时,你会创建 struct 。当然,这会在分配并将其传递给函数时给您带来复制开销。但是你为什么要遵循#2 和#3 呢?如果您的值类型太大怎么办?此外,我不明白您为什么要将不可变类型设为值类型。如果类型是不可变的,则最好节省通过引用传递它的时间,因为无论如何它都无法更改。
我问的原因是我正在制作一个游戏,其中对象具有 Vector2d 类型的坐标、速度等属性。问题是,我应该制作 Vector2d 不可变结构(这不会需要大量额外的内存吗?)、可变结构(人们说它们是邪恶的)还是只是类(我必须总是调用 vector.Clone() 否则我可能无意中得到两个具有相同向量变量的对象)