Propriedades implementadas automaticamente (Guia de programação em C#)

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

Exemplo

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

Não é possível declarar propriedades implementadas automaticamente em interfaces. As propriedades implementadas automaticamente 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 declara uma propriedade com acessadores que deve ser implementada por cada tipo que implementa essa interface.

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 do cliente pode alterar os valores em objetos após a criação. Em classes complexas que contêm comportamento significativo (métodos), bem como dados, muitas vezes é necessário ter propriedades públicas. No entanto, para classes pequenas ou estruturas que apenas encapsulam 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 get acessador (imutável em todos os lugares, exceto o construtor).
  • Declare um acessador e um init acessador (imutável em todos os lugares, exceto durante a get construção do objeto).
  • Declarar o set acessador como privado (imutável para os consumidores).

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

Consulte também