5

クラスのユーザーに対して読み取り専用にList<string> myListしたいクラスがあります。

List<strign> myList {get;}

private void SetListValue()
{
    myList = new List<string>();
    myList.Add("ss");
}

myListこのように、プライベートメンバーのクラス内に値を設定し、クラスユーザーに対して読み取り専用にできると思いました。しかし、そのように宣言すると、値を設定できないことに気付きました。

4

3 に答える 3

11

試す:

public List<string> myList {get; private set;}

これにより、クラス内で設定できますが、外部では設定できません。これにより、外部クライアントによるリストの更新が停止されることはなく、リストへの参照のみが停止されることに注意してください。

于 2013-08-26T13:29:18.137 に答える
5

リスト、コレクションなどのプライベート セッターは、リスト全体をコンシューマーに置き換えることはできませんが、リストのパブリック メンバーを保護することは何もしません。

例えば:

public class MyClass
{
  public IList<string> MyList {get; private set;}

  public MyClass()
  {
     MyList = new List<string>(){"One","Two", "Three"};
  }
}

public class Consumer
{
  public void DoSomething()
  {
      MyClass myClass = new MyClass();

      myClass.MyList = new List<string>(); // This would not be allowed,
                                           // due to the private setter

      myClass.MyList.Add("new string"); // This would be allowed, because it's
                                        // calling a method on the existing
                                        // list--not replacing the list itself
    }
}

IEnumerable<string>消費者がリストのメンバーを変更できないようにするために、 、 、または宣言クラス内でReadOnlyCollection<string>呼び出して、読み取り専用インターフェイスとして公開することができます。List.AsReadOnly()

public class MyClass
{
  public IList<string> MyList {get; private set;}

  public MyClass()
  {
     MyList = new List<string>(){"One","Two", "Three"}.AsReadOnly();
  }
}

public class Consumer
{
  public void DoSomething()
  {
      MyClass myClass = new MyClass();

      myClass.MyList = new List<string>(); // This would not be allowed,
                                           // due to the private setter

      myClass.MyList.Add("new string"); // This would not be allowed, the
                                        // ReadOnlyCollection<string> would throw
                                        // a NotSupportedException
    }
}
于 2013-08-26T13:30:43.263 に答える
0

プライベート セッターを持つパブリック プロパティが必要です。以下のように。

public List<string> myList { get; private set; }
于 2013-08-26T13:30:01.963 に答える