我目前知道在 C# 中使实例不可变的两种方法:
方法 1 - 编译时不变性
void Foo()
{
// Will be serialized as metadata and inserted
// as a literal. Only valid for compile-time constants
const int bar = 100;
}
方法 2 - 只读字段
class Baz
{
private readonly string frob;
public Baz()
{
// Can be set once in the constructor
// Only valid on members, not local variables
frob = "frob";
}
}
最好能保证某些实例一旦实例化就不会被更改。const
并readonly
在较小程度上做到这一点,但范围有限。我只能const
用于编译时常量和readonly
成员变量。
有没有办法在初始实例化后赋予局部变量不变性(这种方式readonly
有效,但在更一般的层面上)?
Scala 使用关键字来执行此操作,该var
关键字声明了一个新的不可变值,该值在获得初始值后无法重新分配:
var xs = List(1,2,3,4,5) // xs is a value - cannot be reassigned to
xs = List(1,2,3,4,5,6); // will not compile