Control de versiones:
creo que no hay mucha diferencia si solo está interesado en la compatibilidad de fuentes.
El uso de una propiedad es mejor para la compatibilidad binaria, ya que puede reemplazarla por una propiedad que tenga un establecedor sin romper el código compilado según su biblioteca.
Convención:
estás 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 morderlo 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
Cambiar de un campo a una propiedad probablemente romperá muchos serializadores. Y AFAIK XmlSerializer
solo serializa propiedades públicas y no campos públicos.
Uso de una propiedad automática
Otra variación común es usar una propiedad automática con un establecedor privado. Si bien esto es breve y una propiedad, no impone la condición de solo lectura. Por eso prefiero los otros.
El campo de solo lectura se autodocumenta
Sin embargo, hay una ventaja del campo:
deja claro de un vistazo en la interfaz pública que es realmente inmutable (salvo la reflexión). Mientras que en el caso de una propiedad, solo puede ver que no puede cambiarla, por lo que tendría que consultar la documentación o implementación.
Pero para ser honesto, uso el primero con bastante frecuencia en el código de la aplicación, ya que soy un vago. En las bibliotecas, normalmente soy más minucioso y sigo la convención.
C # 6.0 agrega propiedades automáticas de solo lectura
public object MyProperty { get; }
Entonces, cuando no necesita admitir compiladores más antiguos, puede tener una propiedad de solo lectura con código que es tan conciso como un campo de solo lectura.
get; readonly set;
opción.