集合类型属性的setter

时间:2009-03-21 10:03:07

标签: c# oop collections

集合类型属性

是否需要setter
//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; }
       }
  }

我何时使用Type 1 vs Type 2? 如果我初始化List&amp;使用readonly属性客户?如Company.Customers.Add(new Customer)

为集合类型属性提供setter的最佳实践是什么?

3 个答案:

答案 0 :(得分:3)

请阅读FxCop推荐CAS2227“收藏属性应该只读” http://msdn.microsoft.com/en-us/library/ms182327(VS.80).aspx

它包含了很好的建议:)

答案 1 :(得分:2)

一般情况下(我通常不会添加它们),但如果您想使用XmlSerializer,则必须使用它们。这是一种痛苦。它也必须是具体类型(例如List<T>T[] - 而不是IList<T>)。幸运的是,DataContractSerializer并没有遭遇同样的命运。

答案 2 :(得分:0)

我更喜欢

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

但这需要

this.Customers = new List<Customer>();
Company构造函数

中的