3

2つのプロパティがあるとしましょう

public readonly list<int> numberListReadonly { get; set; }

public list<int> numberListPrivateSet { get; private set; }

これらのプロパティについては、コンストラクター/プライベート関数を Foo に含めることができます。これらのリストをエラーなしで開始できます。

public Foo()
{
    numberListReadonly = new list<int>();
    numberListPrivateSet = new list<int>();
}

public void FooInside()
{
    numberListReadonly = new list<int>();
    numberListPrivateSet = new list<int>();
}

クラス外からアクセスした場合

void FooOutside()
{
    Foo.numberListReadonly = new List<int>();
    Foo.numberListPrivateSet = new List<int>()
}

コンパイラは予期されるエラーをスローします。
「Foo.numberListReadonly を割り当てられません -- 読み取り専用です」
「Foo.numberListPrivateSet を割り当てられません -- 読み取り専用です」


私は検索を行います。「一般的な方法」は、クラス内で「セット」の機能を持つ「読み取り専用」プロパティでプライベート セットを使用することです。つまり、
set & get を使用した明示的な読み取り専用プロパティは、get & private set と同等ですか?

4

3 に答える 3

3

いいえ。

プライベート セットとは、クラス内の任意の場所でメンバーの値を変更できることを意味します。readonly with set は、コンストラクターでのみ設定できることを意味し、それによって他の場所で変更されないことが保証されます。

于 2012-07-26T02:55:55.203 に答える
3

readonly を使用する概念は、初期化後ではなく、初期化中にのみ値を割り当てることができるということです。そのため、読み取り専用と表示されます。

プライベート セットには別のイメージがあり、いつでも値を変更できますが、クラス レベル内でのみ変更できます。

これで疑問が解消されることを願っています。

于 2012-07-26T02:56:26.833 に答える
2

いいえ、違います。C# の readonly 修飾子は、通常、フィールド (プロパティではない) を読み取り専用としてマークするために存在します。この属性を使用すると、同じクラスのコンストラクターでフィールド値を設定できます。

真の読み取り専用プロパティの推奨される方法は、setter を省略することです。プライベート セッターは、プロパティをクラス外で設定できないことを単に示します。

于 2012-07-26T03:00:28.820 に答える