Compartilhar via


Propriedades implementadas automaticamente

As propriedades implementadas automaticamente tornam a declaração de propriedade mais concisa quando nenhuma outra lógica é necessária nos acessadores de propriedade. Elas também habilitam o código do cliente a criar objetos. Ao declarar uma propriedade, como mostrado no exemplo a seguir, o compilador cria um campo de suporte privado e anônimo que pode ser acessado somente por meio dos acessadores get e set da propriedade. init Os acessadores também podem ser declarados como propriedades implementadas automaticamente.

O exemplo a seguir mostra uma classe simples que tem algumas propriedades implementadas automaticamente:

// 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;
    }
}

Você não pode declarar propriedades implementadas automaticamente em interfaces. As propriedades implementadas automaticamente e com suporte de campo declaram um campo de suporte de instância privada e as interfaces não podem declarar campos de instância. Declarar uma propriedade em uma interface sem definir um corpo implica a criação de uma propriedade com métodos de acesso. Cada tipo que implementa essa interface deve implementar essa propriedade.

Você pode inicializar propriedades implementadas automaticamente de forma semelhante aos campos:

public string FirstName { get; set; } = "Jane";

A classe mostrada no exemplo anterior é mutável. O código cliente pode alterar os valores nos objetos após a criação. Em classes complexas que contêm comportamento significativo (métodos) e dados, geralmente é necessário ter propriedades públicas. No entanto, para classes pequenas ou structs que encapsulam apenas um conjunto de valores (dados) e têm pouco ou nenhum comportamento, você deve usar uma das seguintes opções para tornar os objetos imutáveis:

  • Declare apenas um acessador get (imutável em qualquer lugar, exceto no construtor).
  • Declare um acessador get e um acessador init (imutável em todos os lugares, exceto durante a construção do objeto).
  • Declare o acessador set como privado (imutável para os consumidores).

Para obter mais informações, consulte Como implementar uma classe leve com propriedades implementadas automaticamente.

Talvez seja necessário adicionar validação a uma propriedade implementada automaticamente. O C# 14 adiciona propriedades com suporte de campo. Você usa a palavra-chave field para acessar o campo de apoio gerado pelo compilador de uma propriedade implementada automaticamente. Por exemplo, você pode garantir que a FirstName propriedade no exemplo anterior não possa ser definida como null ou a cadeia de caracteres vazia:

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";

Esse recurso permite que você adicione lógica aos acessores sem exigir que você declare explicitamente o campo auxiliar. Você usa a palavra-chave field para acessar o campo de apoio gerado pelo compilador.

Confira também