Сеттеры для свойств типа коллекции - PullRequest
4 голосов
/ 21 марта 2009

Необходимы ли сеттеры для свойств типа коллекции

//Type 1    
class Company
{
    private IList<Customer> customers;

    public IList<Customer> Customers
    {
        get { return customers; }
        set { customers = value; }
    }
}

 //Type 2 
 class Company
 {
       private readonly IList<Customer> customers = new List<Customer>();

       public IList<Customer> Customers
       {
               get { return customers; }
       }
  }

Когда я использую Тип 1 против Типа 2? Разве не будет достаточно, если я инициализирую List и использую свойство «Только для чтения»? как в Company.Customers.Add(new Customer)

Какова наилучшая практика в отношении предоставления сеттеров для свойств типа коллекции?

Ответы [ 3 ]

3 голосов
/ 21 марта 2009

Пожалуйста, прочитайте рекомендацию FxCop CAS2227 «Свойства коллекции должны быть только для чтения» http://msdn.microsoft.com/en-us/library/ms182327(VS.80).aspx

содержит полезные советы:)

2 голосов
/ 21 марта 2009

Не в общем (и я обычно не добавляю их), но они необходимы, если вы хотите использовать XmlSerializer. Что является болью. Это также должен быть конкретный тип (например, List<T> или T[] - не IList<T>). К счастью, DataContractSerializer не постигла та же участь.

0 голосов
/ 21 марта 2009

Я предпочитаю

public IList<Customer> Customers { get; private set; }

Но это требует

this.Customers = new List<Customer>();

в Company конструктор

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