私はMutating Readonly StructsについてEric Lipertsのブログを読んでいます。このブログでは、値のタイプが不変でなければならない理由として、このブログには多くの参考文献があります。 しかし、まだ一つのことは、明らかではないが、あなたが値型にアクセスするときは、常にそれのコピーを取得することを言うと、ここでの例です:不変の値のタイプ
struct Mutable
{
private int x;
public int Mutate()
{
this.x = this.x + 1;
return this.x;
}
}
class Test
{
public readonly Mutable m = new Mutable();
static void Main(string[] args)
{
Test t = new Test();
System.Console.WriteLine(t.m.Mutate());
System.Console.WriteLine(t.m.Mutate());
System.Console.WriteLine(t.m.Mutate());
}
}
そして質問はこれを、なぜ私は
public readonly Mutable m = new Mutable();
を変更したとき
public Mutable m = new Mutable();
に至るまでは、ES
を予想作業を開始します。
なぜ値型が不変でなければならないのかをより明確に説明できますか? 私はスレッドの安全性には優れていることを知っていますが、この場合も同じことを参照型に適用できます。
リンク先のブログ投稿からさらに引用をコピーして貼り付けることなく、これに答える方法はわかりません。 'm'が 'readonly'であると' t.m'が値になり、変数ではなく、一時変数に置かれ、 'Mutate'メソッドの中で' this'である一時変数です。 'readonly'を取り除き、残りの要素はもはや適用されないので、' Mutate'の中の 'this'は' m'になります。 –