Насколько я помню, я всегда управлял своими свойствами списка из моего объекта, делая их доступными только для чтения.
private IList<DateTime> _dates;
public MyClass() {
_dates = new List<DateTime>();
}
public IList<DateTime> Dates {
get {
return _dates;
}
}
Тем самым я гарантирую, что мой список никогда не будет нулевым, когда я к нему обращаюсь, поскольку клиент не может назначить его.
Однако, для вашего примера вам нужно использовать первый подход, только если вам нужна какая-то логика при получении или установке свойства. В противном случае автоматические свойства работают точно так же, как если бы вы получали и устанавливали значение для частного поля. Более того, { get; set; }
улучшает читабельность и помогает другим программистам понять ваше намерение, с моей скромной точки зрения.
Например:
public class MyClass {
private IList<DateTime> _dates;
public IList<DateTime> Dates {
get {
return _dates;
} set {
_dates = value;
}
}
}
против
public class MyClasse {
public IList<DateTime> Dates { get; set; }
}
Второй способ делает его более тонким и быстрым, по крайней мере для меня, каково намерение. И становится быстрее кодировать класс, когда не требуется логика внутри метода получения и установки.
В противном случае одно не лучше другого и делает то же самое, говоря о получении и установке значения свойства без логики.
Самое главное, вы должны быть довольны своим кодом. Если это заканчивается для вас, не получая каких-либо улучшений, и вам нравится то, что вы делаете, чем просто сделать это. =)