Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Автоматически реализованные свойства делают объявление свойств более кратким, если в методах доступа к свойствам не требуется другая логика. Они также позволяют клиентскому коду создавать объекты. При объявлении свойства, как показано в следующем примере, компилятор создает закрытое анонимное резервное поле, которое может быть доступно только через методы доступа 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 (неизменяемое значение для потребителей).
Дополнительные сведения см. в статье "Реализация упрощенного класса с автоматически реализованными свойствами".
Возможно, потребуется добавить проверку в автоматически реализованное свойство. C# 14 добавляет свойства, поддерживаемые полем. Ключевое field слово используется для доступа к синтезированному полю резервной копии компилятора автоматически реализованного свойства. Например, можно убедиться, что FirstName свойство в предыдущем примере невозможно задать null или пустую строку:
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";
Эта функция позволяет добавлять логику в методы доступа без необходимости явно объявлять резервное поле. Ключевое field слово используется для доступа к резервному полю, созданному компилятором.