Лучший способ добавить элементы в ReadOnlyCollection <T>внутри (внутри одной сборки)? - PullRequest
4 голосов
/ 17 мая 2011

У меня есть следующий класс:

public class Foo
{
     public List<Bar> Bars {get; internal set;}
}

Теперь я хочу сделать Bars a ReadOnlyCollection, чтобы содержимое Bars не могло быть публично изменено:

public class Foo
{
     public ReadOnlyCollection<Bar> Bars {get; internal set;}
}

Теперь, если у меня есть класс в той же сборке, которому нужно добавить элементы в Bars, каков наилучший способ сделать это?

Вот как я это делаю сейчас:

public class FooHelper
{
   public FooHelper()
   {
      Foo foo = new Foo();
      //Code to modify the collection
      List<Bar> bars = foo.Bars.ToList<Bar>();
      bars.Add(new Bar("BAR BAR BAR"));
      foo.Bars = bars.AsReadOnly();
   }
}

Я понял, что было бы проще, если бы у меня был рядовой List<Bar> в Foo примерно так:

public class Foo
{
     private List<Bar> _bars;
     public ReadOnlyCollection<Bar> Bars {get { return _bars.AsReadOnly; }}         
}

... но как при таком подходе добавить элемент в _bars?

Должен ли я сделать его внутренним, сделать его внутренним свойством или добавить новый внутренний метод AddBar()?

1 Ответ

9 голосов
/ 17 мая 2011

Лично я хотел бы добавить внутренний метод AddBar, например:

public class Foo
{
     private List<Bar> _bars;

     public ReadOnlyCollection<Bar> Bars {get { return _bars.AsReadOnly; }}         

     internal void AddBar(Bar bar)
     {
          _bars.Add(bar);
     }
}

другие сборки увидят коллекцию только для чтения, что сделает ее неизменной. Код в той же сборке сможет только добавлять элементы Bar, предоставляя вам «защитный» API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...