Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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
gete um acessadorinit(imutável em todos os lugares, exceto durante a construção do objeto). - Declare o acessador
setcomo 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.