Автоматически реализуемые свойства (Руководство по программированию на C#)Auto-Implemented Properties (C# Programming Guide)

В C# 3.0 и более поздних версиях автоматически реализуемые свойства делают объявление свойств более лаконичным, когда в методах доступа к свойствам не требуется дополнительная логика.In C# 3.0 and later, auto-implemented properties make property-declaration more concise when no additional logic is required in the property accessors. Они также позволяют клиентскому коду создавать объекты.They also enable client code to create objects. При объявлении свойства, как показано в следующем примере, компилятор создает закрытое анонимное резервное поле, которое может быть доступно только через методы доступа get и set свойства.When you declare a property as shown in the following example, the compiler creates a private, anonymous backing field that can only be accessed through the property's get and set accessors.

ПримерExample

В следующем примере показан простой класс, имеющий несколько автоматически реализуемых свойств.The following example shows a simple class that has some auto-implemented properties:

// This class is mutable. Its data can be modified from
// outside the class.
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()
    {
        // Intialize a new object.
        Customer cust1 = new Customer(4987.63, "Northwind", 90108);

        // Modify a property.
        cust1.TotalPurchases += 499.99;
    }
}

В C# 6 и более поздних версиях можно инициализировать автоматически реализуемые свойства аналогично полям.In C# 6 and later, you can initialize auto-implemented properties similarly to fields:

public string FirstName { get; set; } = "Jane";  

Класс, который показан в предыдущем примере, является изменяемым.The class that is shown in the previous example is mutable. Клиентский код может изменить значения в объектах после их создания.Client code can change the values in objects after they are created. В сложных классах, которые содержат значительные возможности (методы) и данные, часто необходимо иметь открытые свойства.In complex classes that contain significant behavior (methods) as well as data, it is often necessary to have public properties. Однако для небольших классов или структур, которые просто инкапсулируют набор значений (данных) и имеют мало функциональных возможностей или совсем их не имеют, вы должны сделать объекты неизменяемыми либо путем объявления метода доступа set как закрытого (неизменяемого для потребителей), либо путем объявления только метода доступа get (неизменяемого везде, кроме конструктора).However, for small classes or structs that just encapsulate a set of values (data) and have little or no behaviors, you should either make the objects immutable by declaring the set accessor as private (immutable to consumers) or by declaring only a get accessor (immutable everywhere except the constructor). Дополнительные сведения см. в статье Практическое руководство. Реализация облегченного класса с автоматически реализуемыми свойствами.For more information, see How to implement a lightweight class with auto-implemented properties.

См. такжеSee also