Reputation: 5641
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?
Upvotes: 4
Views: 2268
Reputation: 1062550
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.
Upvotes: 2
Reputation: 9616
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 :)
Upvotes: 3
Reputation: 100248
I prefer
public IList<Customer> Customers { get; private set; }
But this requries
this.Customers = new List<Customer>();
in Company
constructor
Upvotes: 0