私は現在、C# でインスタンスを不変にする 2 つの方法を知っています。
方法 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