de versiones:
Creo que no hay mucha diferencia si sólo está interesado en la compatibilidad fuente.
Usar una propiedad es mejor para la compatibilidad binaria, ya que puede reemplazarla por una propiedad que tenga un setter sin romper el código compilado, según su biblioteca.
Convención:
Usted está siguiendo la convención. En casos como este, donde las diferencias entre las dos posibilidades son relativamente menores, seguir la convención es mejor. Un caso en el que podría volver a morderte es el código basado en la reflexión.Es posible que solo acepte propiedades y no campos, por ejemplo, un editor/visor de propiedades.
serialización
El cambio de campo a la propiedad probablemente romper un montón de serializadores. Y AFAIK XmlSerializer
solo serializa propiedades públicas y no campos públicos.
El uso de un Autoproperty
Otra variación común es el uso de un autoproperty con un colocador privado. Si bien esto es corto y una propiedad, no hace cumplir la legibilidad. Entonces prefiero los otros.
campo Sólo lectura se selfdocumenting
Hay una ventaja del campo sin embargo:
Deja claro a simple vista en la interfaz pública que en realidad es inmutable (reflexión de restricción). Mientras que en el caso de una propiedad, solo puede ver que no puede cambiarlo, por lo que deberá consultar la documentación o la implementación.
Pero, para ser sincero, uso el primero bastante a menudo en el código de la aplicación porque soy perezoso. En las bibliotecas, normalmente soy más completo y sigo la convención.
C# 6.0 añade propiedades de sólo lectura de automóviles
public object MyProperty { get; }
Por eso, cuando no es necesario para apoyar los compiladores de más edad se puede tener una propiedad realmente sólo lectura con código que es tan concisa como un campo de sólo lectura.
A veces me gustaría que la sintaxis de auto-propiedad incluyera un 'get; readonly set; 'opción. –
Posible duplicado de [C#, inmutabilidad y campos públicos de solo lectura] (http://stackoverflow.com/questions/2249980/c-immutability-and-public-readonly-fields) – user