Propriedades autoimplementadas (Guia de Programação em C#)

As propriedades autoimplementadas tornam a declaração de propriedade mais concisa quando nenhuma lógica adicional for 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. Os acessadores init também podem ser declarados como propriedades implementadas automaticamente.

Exemplo

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

// 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 declaram um campo de backup de instância privada e as interfaces podem não declarar campos de instância. Declarar uma propriedade em uma interface sem definir um corpo declara uma propriedade com acessadores que devem ser implementados por cada tipo que implementa essa interface.

É possível inicializar as propriedades autoimplementadas da mesma forma que os 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), bem como 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 todos os lugares, exceto o 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, confira Como Implementar uma classe leve com propriedades autoimplementadas.

Confira também