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 readonly
sł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 readonly
pola 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 readonly
w 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 interface
lub chcesz leniwie ładować.)