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.
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 respaldadas por campos y implementadas automáticamente declaran un campo de respaldo de instancia privada y las interfaces no pueden declarar campos de instancia. Declarar una propiedad en una interfaz sin definir un cuerpo declara una propiedad con descriptores de acceso. Cada tipo que implementa esa interfaz debe implementar esa propiedad.
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.
Es posible que tenga que agregar validación a una propiedad implementada automáticamente. C# 13 agrega propiedades respaldadas por campos como una característica de vista previa. Use la field
palabra clave para acceder al campo de respaldo sintetizado del compilador de una propiedad implementada automáticamente. Por ejemplo, podría asegurarse de que la FirstName
propiedad del ejemplo anterior no se puede establecer null
en o en la cadena vacía:
public string FirstName
{
get;
set
{
field = (string.IsNullOrWhiteSpace(value) is false
? value
: throw new ArgumentException(nameof(value), "First name can't be whitespace or null"));
}
} = "Jane";
Esta característica permite agregar lógica a descriptores de acceso sin necesidad de declarar explícitamente el campo de respaldo. Use la field
palabra clave para acceder al campo de respaldo generado por el compilador.
Importante
La field
palabra clave es una característica en versión preliminar en C# 13. Debe usar .NET 9 y establecer el <LangVersion>
elemento preview
en en el archivo de proyecto para poder usar la field
palabra clave contextual.
Debe tener cuidado con el uso de la field
característica de palabra clave en una clase que tenga un campo denominado field
. La nueva field
palabra clave sombrea un campo denominado field
en el ámbito de un descriptor de acceso de propiedad. Puede cambiar el nombre de la field
variable o usar el @
token para hacer referencia al field
identificador como @field
. Para más información, lea la especificación de características de la field
palabra clave .