Просто любопытно, что я видел два способа создания коллекций на C#. Для меня это просто стиль, но, возможно, есть еще одно объяснение. Представление? Соответствует ли это шаблону? Единственное, что я вижу в примере 2, это способ предотвратить переписывание коллекции.Пути добавления элементов в коллекции
Пример 1:
public class Employee
{
...
public List<Phone> Phones
{
get; set;
}
...
}
Зв из другого класса
Employee employee = new Employee();
employee.Phones = this.GetPhones();
Пример 2:
public class Employee
{
...
private List<Phone> colPhones;
public List<Phone> Phones
{
get
{
if(this.Phones == null)
{
this.Phones = new List<Phone>();
}
return this.Phones;
}
}
...
public void AddPhone(Phone phone)
{
this.Phones.Add(phone);
}
}
Зв
Employee employee = new Employee();
List<Phone> phones = this.GetPhones();
//--> Here, I know I can use for(int i....) instead of foreach. This is just for the example.
foreach(Phone phone in phones)
{
employee.Phones.Add(phone);
}
UPDATE:
Я нашел эту ссылку Encapsulate collection, когда я читал книгу под названием «Рефакторинг» Мартин-Фаулера, который является тем же понятие, как принято отвечать.
В примере 2 "частный список colPhones;" похоже, что он не используется - артефакт предыдущего переписывания программы? –
RenniePet
Его следует использовать. Вместо «this.Phones» внутри «get-g», OP должен ссылаться на 'this.colPholes'. В противном случае они получат циклическую ссылку, которая будет постоянно вызывать StackOverflowExceptions всякий раз, когда к ней обращаются. – krillgar