Я предполагаю, что для второй версии вы имели в виду:
public class Simple
{
private readonly IList<string> entries = new List<string>();
public IList<string> Entries { get { return entries; } }
}
Обратите внимание, что я сделал переменную entries
только для чтения.
Если это то, что вы имели в виду, потому что вам не нужно переназначать переменную где-либо в классе (кроме, возможно, в конструкторах), тогда я думаю, что это предпочтительнее автоматической версии свойства.
Это показывает явное намерение, что это означало только для чтения - тогда как автоматическое свойство только показывает, что оно предназначено только для чтения для внешнего мира . Кто-то (возможно, вы) может в конечном итоге изменить значение автоматического свойства с в классе позже, забыв, что первоначальный дизайн был предназначен только для чтения.
(Конечно, в действительности мы не говорим о полной неизменности, так как любой может добавлять или удалять записи из списка.)
Если вы действительно хотите изменить значение свойства в классе, обязательно используйте первую версию.
Выразив предпочтение полевой версии только для чтения, на практике я обнаружил, что использую свойство Automatic, потому что для чтения и записи меньше кода. Хотя я чувствовал себя грязным каждый раз, когда делал это. В идеале я хотел бы создать способ автоматически реализовать свойство только для чтения, которое можно установить только в конструкторе, как поле только для чтения. (Свойство будет поддерживаться полем только для чтения, а вызовы установщика будут компилироваться непосредственно в назначения полей.) Однако я не слышал о каких-либо планах, чтобы такого рода вещи действительно происходили.