4

私はそのようなクラスのプロパティを設定しています

public string Name { get; set; }

しかし、私はそのようなプロパティを設定することもできます

public string Name { get; private set; }

これらの違いを知りたいですか?そして彼らはどのような範囲を持っていますか?

4

3 に答える 3

5

これは、クラスインスタンスからこのプロパティを設定できないことを意味します。同じクラスのメンバーだけが設定できます。したがって、部外者にとって、このプロパティはプロパティになりread-onlyます。

class Foo
{
    public string Name1 { get; set; }

    public string Name2 { get; private set; }

    public string Name3 { get { return Name2; } set { Name2 = value; }
}

それで

Foo f = new Foo();

f.Name1 = ""; // No Error

f.Name2 = ""; // Error.

f.Name3 = ""; // No Error

Name3に値をName2設定しますが、Name2直接に値を設定することはできません。

そして彼らはどのような範囲を持っていますか?

Name1およびプロパティは公開されているためName3、それらとそのgetおよびsetメソッドはどこでも使用できます。

Name3もパブリックですが、そのセットはプライベートであるため、プロパティとgetメソッドはどこでも使用できます。Setメソッドのスコープはクラスのみに制限されています(privateアクセス修飾子は、それが定義されているエンティティ内にスコープを持っています)。

于 2012-05-31T06:49:12.597 に答える
3

public string Name { get; private set; } プライベートセットを使用する場合は、プロパティがReadOnly外部からのものであることを意味します。読み取り専用プロパティがあり、バッキング変数を明示的に宣言したくない場合に便利です。

public string Name { get; private set; }それはと同じです:

private string _Name;
public string Name
{
    get { return _Name; }
    private set { _Name = value; }
}
于 2012-05-31T06:50:30.117 に答える
3

最初のものは、クラス外で利用可能なメソッドを持っSetています。Get2つ目Getは、クラス外で使用できるメソッドがありますが、Setメソッドはクラス内でのみ使用できます。これは通常、読み取り専用の動作を示します。

于 2012-05-31T06:50:32.267 に答える