1

読み取り専用フィールドのみを持つ C# クラスがあるが、フィールドの型が不変でない場合、そのクラスは不変と見なされますか?

このクラスは不変ですか?

public class Foo
{
    private readonly int[] _blah;

    public Foo(int[] blah)
    {
        _blah = blah;
    }

    public int[] Blah { get { return _blah; } }
}

配列のメンバー変数は変更できませんが、配列のメンバーを変更できるため、_blah は不変ではありません。

では、フィールドがすべて読み取り専用の場合、クラスは不変ですか、それとも、フィールドが読み取り専用であるだけでなく、それ自体も不変である場合にのみ、クラスは不変ですか?

4

4 に答える 4

1

このクラスのインスタンスは、コンテンツを変更できるため、不変ではありません。例foo.Blah[0] = 42;。ただし、BlahプロパティをIEnumerable<int>またはに変更するIReadOnlyList<int>と、インスタンスは不変と見なされます。

于 2013-02-13T02:48:18.000 に答える
0

3 つの原則に従えば、不変だと思います。

  • フィールドを読み取り専用のプライベートにします。
  • パブリック プロパティの get アクセサーを提供します。
  • クラスを継承する必要がなくなった場合は、封印します。

これらは、不変を厳密に定義した厳格なルールではありません。それらは単なるガイドラインです。

于 2013-02-13T02:50:22.503 に答える