C#代码整洁之道:代码重构与性能提升
上QQ阅读APP看书,第一时间看更新

3.8 不可变对象与数据结构

不可变类型通常可以认作值类型。对于值类型来说,一旦获得则其值就不再改变。但除此以外,还有不可变对象和不可变的数据结构类型。总之,不可变类型即那些内部状态在初始化之后就不会改变的类型。

不可变类型的行为对于程序员来说应当是习以为常的,因此它符合“最小惊讶原则”(principle of least astonishment,POLA)。不可变类型所遵循的POLA原则同样也会附加在客户端之间的所有契约对象上,因此程序员很容易理解它们的行为。

由于不可变类型容易预测又不会改变,因此使用时便不会遇到那些讨厌的意外。我们不需要担心它们由于改变而造成不良影响,因此它们是线程安全的,非常适合在线程间共享信息并无须编写任何防御性程序。

当创建不可变类型对象并验证其有效性后,就可以确保该对象在整个生命周期内的有效性。

接下来将用范例来说明如何在C#中定义不可变对象。

不可变类型的范例

本节将实际定义不可变对象。在以下代码中,Person对象拥有三个私有成员变量,且它们全部都仅在构造器中初始化。一旦赋值,其值就无法在余下的生命周期内改变。每一个变量都通过只读属性的方式确保了它们都是只读的。

由此可见,定义不可变对象和不可变数据结构是很容易的。接下来我们将关注点转向对象中的数据和方法。