Setters for collection type properties

2019-05-04 17:48发布

Are setters necessary for Collection Type Properties

//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; }
       }
  }

When do I use Type 1 vs Type 2 ? Wouldn't it suffice if I initialize a List & use readonly property Customers ? as in Company.Customers.Add(new Customer)

What is the best practice with respect to providing setters for collection Type properties?

3条回答
冷血范
2楼-- · 2019-05-04 18:19

Please read the FxCop recommondation CAS2227 "Collection properties should be read only" http://msdn.microsoft.com/en-us/library/ms182327(VS.80).aspx

it contains good advice :)

查看更多
Bombasti
3楼-- · 2019-05-04 18:23

I prefer

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

But this requries

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

in Company constructor

查看更多
该账号已被封号
4楼-- · 2019-05-04 18:31

Not in general (and I don't normally add them), but they are necessary if you want to use XmlSerializer. Which is a pain. It must also be a concrete type (for example List<T> or T[] - not IList<T>). Fortunately, DataContractSerializer doesn't suffer the same fate.

查看更多
登录 后发表回答