一尘不染

结构的不变性[重复]

c#

这个问题已经在这里有了答案

8年前关闭。

可能重复:
为什么可变结构是邪恶的?

我在很多地方都读过它,包括在这里最好使结构不可变。

这是什么原因呢?我看到许多Microsoft创建的可变结构,例如xna中的结构。BCL中可能还有更多。

不遵循此准则的利弊是什么?


阅读 230

收藏
2020-05-19

共1个答案

一尘不染

结构应该代表 价值 。值不变。数字12是永恒的。

但是,请考虑:

Foo foo = new Foo(); // a mutable struct
foo.Bar = 27;
Foo foo2 = foo;
foo2.Bar = 55;

现在foo.Bar和foo2.Bar是不同的,这通常是意外的。特别是在诸如属性之类的场景中(幸运的是编译器会检测到此情况)。而且还有收藏等;您如何明智地对其进行变异?

使用可变结构,数据丢失太容易了。

2020-05-19