Compartir a través de


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 acceso init (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 .

Consulte también