La guía general para C # es usar siempre una propiedad sobre un campo público. Esto tiene sentido: al exponer un campo, está exponiendo muchos detalles de implementación. Con una propiedad, encapsula ese detalle para que quede oculto del código consumidor y los cambios de implementación se desacoplan de los cambios de interfaz.
Sin embargo, me pregunto si a veces hay una excepción válida a esta regla cuando se trata con la readonly
palabra clave. Al aplicar esta palabra clave a un campo público, ofrece una garantía adicional: inmutabilidad. Esto no es solo un detalle de implementación, la inmutabilidad es algo en lo que un consumidor podría estar interesado. El uso de un readonly
campo lo hace parte del contrato público y algo que no se puede romper con futuros cambios o herencias sin tener que modificar la interfaz pública. Eso es algo que una propiedad no puede ofrecer.
Entonces, ¿garantizar la inmutabilidad es una razón legítima para elegir un readonly
campo sobre una propiedad en algunos casos?
(Para aclarar, ciertamente no digo que siempre debas hacer esta elección solo porque el campo sea inmutable en este momento, solo cuando tenga sentido como parte del diseño de la clase y su uso previsto incluya la inmutabilidad en su contrato. Me interesan principalmente las respuestas que se centran en si esto puede estar justificado, en lugar de casos específicos en los que no lo está, como cuando necesita que el miembro esté en una interface
o desea realizar una carga diferida).