Ogólne wskazówki dla C # to zawsze używać właściwości w polu publicznym. Ma to sens - wystawiając pole, ujawniasz wiele szczegółów implementacji. Za pomocą właściwości hermetyzujesz ten szczegół, aby był ukryty przed użyciem kodu, a zmiany implementacyjne są oddzielone od zmian interfejsu.
Zastanawiam się jednak, czy czasami występuje ważny wyjątek od tej reguły w przypadku readonlysłowa kluczowego. Stosując to słowo kluczowe w polu publicznym, dajesz dodatkową gwarancję: niezmienność. Nie jest to tylko szczegół implementacji, niezmienność jest czymś, co może zainteresować konsumenta. Użycie readonlypola powoduje, że staje się ono częścią kontraktu publicznego i czymś, co nie może zostać zerwane przez przyszłe zmiany lub dziedziczenie bez konieczności modyfikacji interfejsu publicznego. Tego nie może zaoferować nieruchomość.
Czy readonlyw niektórych przypadkach zagwarantowanie niezmienności jest uzasadnionym powodem wyboru pola zamiast nieruchomości?
(Dla wyjaśnienia, z pewnością nie mówię, że zawsze powinieneś dokonywać tego wyboru tylko dlatego, że pole jest w tej chwili niezmienne, tylko wtedy, gdy ma to sens w ramach projektu klasy i zamierzone jest użycie niezmienności w umowie. Najbardziej interesują mnie odpowiedzi skupiające się na tym, czy może to być uzasadnione, a nie na konkretnych przypadkach, w których tak nie jest, na przykład gdy potrzebujesz członka interfacelub chcesz leniwie ładować.)
