Автоматически реализованные свойства
Автоматически реализованные свойства делают объявление свойств более кратким, если в методах доступа к свойствам не требуется другая логика. Они также позволяют клиентскому коду создавать объекты. При объявлении свойства, как показано в следующем примере, компилятор создает закрытое анонимное резервное поле, которое может быть доступно только через методы доступа get
и set
свойства. init
Методы доступа также можно объявить как автоматически реализованные свойства.
Пример
В следующем примере показан простой класс, имеющий некоторые автоматически реализованные свойства:
// 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;
}
}
Вы не можете объявлять автоматически реализованные свойства в интерфейсах. Автоматически реализованные свойства объявляют поле резервного копирования частного экземпляра, а интерфейсы не могут объявлять поля экземпляров. Объявление свойства в интерфейсе без определения тела приводит к объявлению свойства с методами доступа, которые должны реализовываться каждым типом, реализующим этот интерфейс.
Вы можете инициализировать автоматически реализованные свойства, аналогичные полям:
public string FirstName { get; set; } = "Jane";
Класс, который показан в предыдущем примере, является изменяемым. Клиентский код может изменить значения в объектах после создания. В сложных классах, содержащих значительное поведение (методы) и данные, часто необходимо иметь общедоступные свойства. Но для небольших классов или структур, которые просто инкапсулируют набор значений (данных) без какого-либо поведения (или с минимальным поведением), следует использовать один из следующих параметров, чтобы сделать объекты неизменяемыми:
- Объявите только метод доступа
get
(неизменяемое значение везде, за исключением конструктора). - Объявите методы доступа
get
иinit
(неизменяемое значение везде, за исключением создания объекта). - Объявите метод доступа
set
с атрибутом private (неизменяемое значение для потребителей).
Дополнительные сведения см. в статье "Реализация упрощенного класса с автоматически реализованными свойствами".