example - ¿Qué son las propiedades automáticas en C#y cuál es su propósito?
summary example c# (6)
¿Podría alguien proporcionar una explicación muy simple de Propiedades automáticas en C #, su propósito y tal vez algunos ejemplos? ¡Trata de mantener las cosas en términos sencillos, por favor!
Desde http://msdn.microsoft.com/en-us/library/bb384054.aspx :
En C # 3.0 y posteriores, las propiedades implementadas automáticamente hacen que la declaración de propiedad sea más concisa cuando no se requiere una lógica adicional en los descriptores de acceso a la propiedad. También habilitan el código del cliente para crear objetos.
Cuando declara una propiedad, el compilador crea un campo de respaldo privado y anónimo al que solo se puede acceder a través de los accesadores get y set de la propiedad.
class Person
{
public string Name { get; set; }
}
En las versiones anteriores de C #, para usar propiedades, necesitaría crear un campo para contener el valor (llamado una tienda de respaldo):
private string _something;
public string Prop { get { return _something; } }
Comenzando con C # 3.0, este requisito ya no es necesario, y el compilador creará automáticamente la tienda de respaldo para usted, por lo que no es necesario declarar el campo _algo.
Puede leer más sobre este asunto aquí: http://msdn.microsoft.com/en-us/library/bb384054.aspx
Espero que esto ayude.
Las propiedades automáticas se usan cuando no se requiere una lógica adicional en los accesadores de propiedades.
La declaración se vería así:
public int SomeProperty { get; set; }
Simplemente son azúcar sintáctico, por lo que no necesitarás escribir el siguiente código más extenso:
private int _someField;
public int SomeProperty
{
get { return _someField;}
set { _someField = value;}
}
Si está preguntando por qué usaría Propiedades o Propiedades automáticas, esta es la filosofía de diseño detrás de esto.
Un principio de diseño importante es que nunca exponga los campos como públicos, sino que siempre acceda a todo a través de las propiedades. Esto se debe a que nunca se puede saber cuándo se accede a un campo y, lo que es más importante, cuándo se establece. Ahora, muchas veces, nunca se necesita ningún proceso mientras se establece u obtiene el valor (por ejemplo, comprobación de rango). Esta es la razón por la cual se crearon las propiedades automáticas. Son una forma simple y única de crear una propiedad. La tienda de respaldo para esto es creada por el compilador.
Si bien esto es lo que hago, incluso para mis programas internos, es probablemente más importante para los diseñados para uso público (para la venta, de código abierto, etc.). Si usa una propiedad automática y luego decide que necesita hacer algo más en el set
o en get
, puede cambiar fácilmente su código sin romper la interfaz pública.
Son solo un atajo de codificación para guardar al programador unas pocas teclas. En lugar de escribir todo esto:
private string _lastName;
public string LastName {
get {
return _lastName;
}
set {
_lastName = value;
}
}
solo puede escribir:
public string LastName {
get; set;
}
y deje que el compilador genere el resto automáticamente.
Editar: Ampliando un poco, se usan para facilitar el tener variables privadas en la clase, pero les permiten ser visibles fuera de la clase (sin poder modificarlas)
¡Ah, y otra ventaja con las propiedades automáticas es que puedes usarlas en las interfaces ! (Que no permiten variables miembro de ningún tipo)
Con propiedades normales, puede hacer algo como:
private string example;
public string Example
{
get { return example; }
set { example = value; }
}
Las propiedades automáticas le permiten crear algo realmente conciso:
public string Example { get; set; }
Entonces, si quisieras crear un campo donde solo fuera configurable dentro de la clase, podrías hacer:
public string Example { get; private set; }
Esto sería equivalente a:
private string example;
public string Example
{
get { return example; }
private set { example = value; }
}
O en Java:
private String example;
public String getExample() {
return example;
}
public void setExample(String value) {
example = value;
}
Editar: @Paya también me alertó sobre: