Versioning:
Я думаю, что это не имеет большого значения, если вы заинтересованы только в совместимости с исходным кодом.
Использование свойства лучше для двоичной совместимости, поскольку вы можете заменить его свойством, которое имеет установщик, не нарушая скомпилированный код в зависимости от вашей библиотеки.
Конвенция:
Вы следуете конвенции. В таких случаях, когда различия между этими двумя возможностями относительно незначительны, следование соглашению лучше. Одним из случаев, когда он может вернуться, чтобы укусить вас, является основанный на отражении код. Он может принимать только свойства, а не поля, например, редактор / просмотрщик свойств.
Сериализация
Переход от поля к свойству, вероятно, сломает много сериализаторов. А AFAIK XmlSerializer
только сериализует открытые свойства, а не открытые поля.
Использование автообъекта
Еще одно распространенное изменение - использование autoproperty с частным сеттером. Хотя это краткое и свойство, оно не обеспечивает чтение только. Поэтому я предпочитаю другие.
Поле «Только чтение» является самодокументированным
Есть одно преимущество в этой области:
С первого взгляда на общедоступный интерфейс становится ясно, что он на самом деле неизменен (за исключением отражения). Принимая во внимание, что в случае свойства вы можете видеть только то, что вы не можете изменить его, поэтому вам придется обратиться к документации или реализации.
Но, честно говоря, я часто использую первый в коде приложения, так как я ленивый. В библиотеках я обычно более внимателен и следую правилам.
C # 6.0 добавляет только автоматические свойства для чтения
public object MyProperty { get; }
Так что, когда вам не нужно поддерживать старые компиляторы, вы можете иметь действительно доступное только для чтения свойство с кодом, столь же кратким, что и поле только для чтения.