Sé que cuando se usan propiedades automáticas, el compilador crea su propio campo de respaldo detrás de la pantalla. Sin embargo, en muchos programas que leo para aprender de, veo a la gente escribir explícitamentePropiedades automáticas con o sin campo de respaldo: ¿preferencia?
private int _backingField;
public int Property { get { return _backingField; } }
¿Cuál es la diferencia entre arriba y abajo?
public int Property { get; private set; }
entiendo que es obvio para utilizar la propiedad cuando en realidad tienen efectos secundarios en el getter o setter, pero eso no es a menudo el caso. Además, entiendo que debe usar explícitamente el campo de respaldo en el caso de las estructuras, no puede acceder a sus miembros a través de las propiedades.
La única diferencia que he podido encontrar es que la forma de llamar al valor es diferente dentro de la clase en la que está definido. ¿Es simple preferencia, o hay algo más para llamar un valor a través de su propiedad o al acceder directamente al campo? ¿Convenciones simples?
Usando el Vector2 del XNA como ejemplo, si digo public Vector2 TheVector {get; conjunto; } No puedo llamar al TheVector.X = 10; En su lugar, debo usar el campo real. Algo sobre pasar por valor/referencia. (¿Tiene algún material de lectura que aclara pasar por valor/referencia para C#, como nota al margen?) – Taelia
Además, si realmente no hay diferencia entre mis dos ejemplos, ¿por qué tanta gente todavía crea explícitamente un campo de respaldo (sin real propósito)? – Taelia
@Taelia: Correcto, ese es el caso de una estructura mutable, que normalmente evito. Es porque la propiedad devuelve una copia del valor. Y no voy a tratar de dar razones de lo que otras personas hacen. –