Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Автоматически реализованные свойства делают объявление свойств более кратким, если в методах доступа к свойствам не требуется другая логика. Они также позволяют клиентскому коду создавать объекты. При объявлении свойства, как показано в следующем примере, компилятор создает закрытое анонимное резервное поле, которое может быть доступно только через методы доступа 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 слово используется для доступа к резервному полю, созданному компилятором.