Версія:
Я думаю, це не має великого значення, якщо вас цікавить лише сумісність джерел.
Використання властивості краще для двійкової сумісності, оскільки ви можете замінити його властивістю, яка має сеттер, не порушуючи скомпільований код залежно від вашої бібліотеки.
Конвенція:
Ви дотримуєтесь конвенції. У таких випадках, коли відмінності між двома можливостями порівняно незначні, дотримуючись конвенції, краще. Одним з випадків, коли це може повернутися до вас, вас може вкусити - це код на основі рефлексії. Він може приймати лише властивості, а не поля, наприклад редактор властивостей / переглядач.
Серіалізація
Перехід від поля до властивості, ймовірно, призведе до поломки багатьох серіалізаторів. А AFAIK XmlSerializer
робить лише серіалізацію державного майна, а не загальнодоступних полів.
Використання автовластивості
Ще однією поширеною варіацією є використання автовластивості з приватним установщиком. Незважаючи на те, що це коротко і властивість, воно не гарантує лише готовність до читання. Тому я віддаю перевагу іншим.
Поле для читання - це самодокументування.
Однак є одна перевага поля:
воно дає зрозуміти з першого погляду на загальнодоступний інтерфейс, що воно насправді незмінне (заборона відображення). Тоді як у випадку з властивістю ви можете бачити лише те, що не можете змінити його, тому вам доведеться звернутися до документації або реалізації.
Але чесно кажучи, я досить часто використовую перший у коді програми, оскільки я лінивий. У бібліотеках я, як правило, більш ретельний і дотримуюсь домовленостей.
C # 6.0 додає автоматичні властивості лише для читання
public object MyProperty { get; }
Отже, коли вам не потрібно підтримувати старі компілятори, ви можете мати справді властивість лише для читання з кодом, який такий же лаконічний, як поле для читання.
get; readonly set;
опцію.