La guida generale per C # è utilizzare sempre una proprietà su un campo pubblico. Questo ha senso: esponendo un campo, stai esponendo molti dettagli di implementazione. Con una proprietà, incapsuli quel dettaglio in modo che sia nascosto dal consumo di codice e le modifiche all'implementazione siano disaccoppiate dalle modifiche dell'interfaccia.
Tuttavia, mi chiedo se a volte esiste una valida eccezione a questa regola quando si tratta della readonly
parola chiave. Applicando questa parola chiave a un campo pubblico, si fornisce una garanzia aggiuntiva: immutabilità. Questo non è solo un dettaglio di implementazione, l'immutabilità è qualcosa che potrebbe interessare un consumatore. L'uso di un readonly
campo lo rende parte del contratto pubblico e qualcosa che non può essere rotto da future modifiche o eredità senza dover anche modificare l'interfaccia pubblica. È qualcosa che una proprietà non può offrire.
Quindi garantire l'immutabilità è un motivo legittimo per scegliere un readonly
campo piuttosto che una proprietà in alcuni casi?
(Per chiarimenti, non sto certamente 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 è previsto l'uso per includere l'immutabilità nel suo contratto. Sono per lo più interessato a risposte incentrate sul fatto che ciò possa essere giustificato, piuttosto che su casi specifici in cui non lo è, ad esempio quando è necessario che il membro si trovi su un interface
o si desideri eseguire il caricamento lento.)