La guida generale per C # è di utilizzare sempre una proprietà su un campo pubblico. Questo ha senso: esponendo un campo, stai esponendo molti dettagli di implementazione. Con una proprietà, incapsula i dettagli in modo che siano nascosti dal consumo del codice e le modifiche di implementazione vengono disaccoppiate dalle modifiche dell'interfaccia.
Tuttavia, mi chiedo se a volte ci sia un'eccezione valida a questa regola quando si ha a che fare con la parola chiave readonly
. Applicando questa parola chiave a un campo pubblico, si ottiene una garanzia extra: immutabilità. Questo non è solo un dettaglio di implementazione, l'immutabilità è qualcosa a cui un consumatore potrebbe essere interessato. L'utilizzo di un campo readonly
lo rende parte del contratto pubblico e qualcosa che non può essere interrotto da modifiche o eredità future senza dover modificare anche il interfaccia pubblica. Questo è qualcosa che una proprietà non può offrire.
Quindi garantire l'immutabilità è un motivo legittimo per scegliere un campo readonly
su una proprietà in alcuni casi?
(Per chiarimenti, non sto certo dicendo che dovresti sempre fare questa scelta solo perché il campo sembra essere immutabile al momento, solo quando ha senso come parte del design della classe e È inteso che l'utilizzo include l'immutabilità nel suo contratto. Sono principalmente interessato a risposte che si concentrino sul fatto che questo possa essere giustificato, piuttosto che su casi specifici in cui non lo è, come quando è necessario che il membro sia su interface
o desideri per caricare pigro.)