集合类型属性的设置器

4

集合类型属性是否需要设置器

//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和Type 2?如果我初始化一个List并使用只读属性Customers,如Company.Customers.Add(new Customer),不就足够了吗?

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

3个回答

3

2

一般情况下不需要加上这些标签(我通常不会添加它们),但如果您想使用XmlSerializer,则必须添加。这可能有些麻烦。此外,它必须是具体类型(例如List<T>T[] - 而不是IList<T>)。幸运的是,DataContractSerializer不会遇到同样的问题。


我很想知道为什么这个被踩了...事实是:XmlSerializer要求集合属性有setter。这不是观点,等等——你可以试试看... - Marc Gravell

0

我更喜欢

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

但这需要

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

Company 构造函数中


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接