Propiedades implementadas automáticamente
Las propiedades implementadas automáticamente hacen que la declaración de propiedad sea más concisa cuando no se requiere ninguna otra lógica en los descriptores de acceso de propiedad. También permite que el código de cliente cree objetos. Cuando se declara una propiedad tal como se muestra en el ejemplo siguiente, el compilador crea un campo de respaldo privado y anónimo al que solo se puede acceder con los descriptores de acceso de propiedad get
y set
. init
Los descriptores de acceso también se pueden declarar como propiedades implementadas automáticamente.
Ejemplo
En el ejemplo siguiente se muestra una clase simple que tiene algunas propiedades implementadas automáticamente:
// This class is mutable. Its data can be modified from
// outside the class.
public class Customer
{
// Auto-implemented properties for trivial get and set
public double TotalPurchases { get; set; }
public string Name { get; set; }
public int CustomerId { get; set; }
// Constructor
public Customer(double purchases, string name, int id)
{
TotalPurchases = purchases;
Name = name;
CustomerId = id;
}
// Methods
public string GetContactInfo() { return "ContactInfo"; }
public string GetTransactionHistory() { return "History"; }
// .. Additional methods, events, etc.
}
class Program
{
static void Main()
{
// Initialize a new object.
Customer cust1 = new Customer(4987.63, "Northwind", 90108);
// Modify a property.
cust1.TotalPurchases += 499.99;
}
}
No se pueden declarar propiedades implementadas automáticamente en interfaces. Las propiedades implementadas automáticamente declaran un campo de respaldo de instancia privada y las interfaces no pueden declarar campos de instancia. Al declarar una propiedad en una interfaz sin definir un cuerpo, se declara una propiedad con descriptores de acceso que debe ser implementada por cada tipo que implemente esa interfaz.
Puede inicializar propiedades implementadas automáticamente de forma similar a los campos:
public string FirstName { get; set; } = "Jane";
La clase que se muestra en el ejemplo anterior es mutable. El código de cliente puede cambiar los valores de los objetos una vez creados. En clases complejas que contienen el comportamiento importante (métodos) y los datos, suele ser necesario tener propiedades públicas. Pero para las clases pequeñas o estructuras que solo encapsulan un conjunto de valores (datos) y tienen poco o ningún comportamiento, debe usar una de las opciones siguientes para hacer que los objetos sean inmutables:
- Declare solo un descriptor de acceso
get
(inmutable en cualquier lugar excepto el constructor). - Declare un descriptor de acceso
get
y un descriptor de accesoinit
(inmutable en cualquier lugar excepto durante la construcción del objeto). - Declare el descriptor de acceso
set
como private (inmutable para los consumidores).
Para obtener más información, vea Cómo implementar una clase ligera con propiedades implementadas automáticamente.