init (справочник по C#)

В C# 9 и более поздних версий ключевое слово init определяет метод доступа в свойстве или индексаторе. Метод задания только для инициализации назначает значение свойству или элементу индексатора только во время создания объекта. Это обеспечивает неизменяемость, чтобы после инициализации объекта его нельзя было изменить снова.

Дополнительные сведения и примеры см. в разделах Свойства, Автоматически реализуемые свойства и Индексаторы.

В приведенном ниже примере определен как метод доступа get, так и метод доступа init для свойства с именем YearOfBirth. Для возвращения значения свойства в нем используется закрытое поле с именем _yearOfBirth.

class Person_InitExample
{
     private int _yearOfBirth;

     public int YearOfBirth
     {
         get { return _yearOfBirth; }
         init { _yearOfBirth = value; }
     }
}

Метод доступа init часто состоит из одного оператора, который присваивает значение, как в предыдущем примере. Обратите внимание, что из-за следующего initне будет работать:

var john = new Person_InitExample
{
    YearOfBirth = 1984
};

john.YearOfBirth = 1926; //Not allowed, as its value can only be set once in the constructor

Метод init доступа можно использовать в качестве элемента, воплощающего выражение. Пример

class Person_InitExampleExpressionBodied
{
    private int _yearOfBirth;

    public int YearOfBirth
    {
        get => _yearOfBirth;
        init => _yearOfBirth = value;
    }
}

Метод init доступа также можно использовать в автоматически реализуемых свойствах, как показано в следующем примере кода:

class Person_InitExampleAutoProperty
{
    public int YearOfBirth { get; init; }
}

Спецификация языка C#

Дополнительные сведения см. в спецификации языка C#. Спецификация языка является предписывающим источником информации о синтаксисе и использовании языка C#.

См. также