c# c#-3.0

Diferencia entre propiedades automáticas y campo público en C#3.0



c#-3.0 (7)

No pude entender por qué la característica de lenguaje de propiedad de implementación automática existe en C # 3.0.

¿Qué diferencia está haciendo cuando dices?

public string FirstName;

que

public string FirstName { get; set; }


Considere qué sucede si luego desea cambiar cada uno de ellos a una propiedad con una implementación personalizada. Si es una propiedad implementada automáticamente, simplemente agrega un campo y cambia la implementación. Compatibilidad completa de código fuente y binario.

Para empezar, si no es un campo, no obtiene compatibilidad de fuente ni de binario. Tienes que reconstruir todo lo que hace referencia a él, y arreglar todo lo que ya no se compila.

Además, las propiedades tienen varios beneficios sobre los campos . Mi principal objeción personal a los campos es que expone una decisión de implementación en la API.


El primero es un campo público, mientras que el segundo es una propiedad pública.

La principal diferencia está en cómo se utilizan. Por ejemplo, WPF solo puede enlazar datos a propiedades, no a campos.


La diferencia es que otros ensamblados compilados con código que lee la propiedad se compilan contra una propiedad.

Si más adelante decide que necesita agregar código al captador o configurador, puede hacer eso, sin tener que forzar a que todos los demás ensamblajes vinculados al mismo se vuelvan a compilar.

No es así con los campos. Si luego cambia un campo para que sea una propiedad, para agregar ese código, otros ensamblajes vinculados a los suyos dejarán de funcionar correctamente ya que están compilados para leer un campo, no una propiedad.

Además, se escribe mucho código para buscar propiedades, no campos, como enlace de datos y similares.


Las propiedades automáticas son propiedades regulares generadas por el compilador, usan campos de respaldo como cualquier propiedad regular pero no es necesario escribir el código para eso. Aquí hay una muestra muy ilustrativa (gracias a Reflector ) del código generado por el compilador:

[CompilerGenerated] private string <ContentType>k__BackingField; public string ContentType { [CompilerGenerated] get { return this.<ContentType>k__BackingField; } [CompilerGenerated] set { this.<ContentType>k__BackingField = value; } }


Porque se implementan de manera diferente en el código IL resultante (y en el lenguaje de máquina). Una propiedad automática aún está expuesta como un captador y definidor público, mientras que un campo público es solo eso, un solo campo.

Por lo tanto, la implementación de una propiedad automática le permite, en una fecha posterior, cambiar el comportamiento interno del captador o del configurador (como agregar un validador) sin volver a compilar o volver a codificar las clases dependientes que lo utilizan ...


Solo para agregar a lo que otras personas han dicho, declarando un campo público, el campo es accesible para leer y escribir. declarar propiedad pública automática, aunque la propiedad es pública, aún puede agregar un modificador para controlar la accesibilidad en el nivel de obtener / establecer.

public string FirstName { get; private set; }

El usuario de su clase ve el Nombre como propiedad pública. Sin embargo, él / ella no puede escribirle.


debido a este uso:
public string FirstName { get; private set; }
propiedad fácil, que ''kosher'' por las reglas de OO