День четыреста пятьдесят шестой. #CSharp9
Позиционное и Номинальное Создание Объектов. Начало
C# позволяет создавать объекты, используя позиционный или номинальный стиль.
- Позиционное создание предполагает использование конструктора для задания значений свойствам:
- Номинальное создание предполагает использование инициализаторов:
См. также «Использование Неизменяемых Структур Данных в C#»
Номинальное Создание в C# 9
В C# 9 для создания неизменяемых типов предложен новый вид свойств только для инициализации с использованием ключевого слова
Источник: https://csharp.christiannagel.com/2020/04/21/c-9-positional-or-nominal-creation/
Позиционное и Номинальное Создание Объектов. Начало
C# позволяет создавать объекты, используя позиционный или номинальный стиль.
- Позиционное создание предполагает использование конструктора для задания значений свойствам:
public class Person {
  public string FirstName { get; }
  public string LastName { get; }
  public Person(string firstName, string lastName) {
    FirstName = firstName;
    LastName = lastName;
  }
}
Person p = new Person("Charles", "Leclerc");
При наследовании для инициализации унаследованных свойств конструктор может вызывать конструктор базового класса.- Номинальное создание предполагает использование инициализаторов:
Person p = new Person { FirstName = "Charles", LastName = "Leclerc" };
До сих пор проблема с инициализаторами была в том, что таким образом можно было задавать значения только доступным для записи свойствам. Инициализатор объекта - это просто синтаксический сахар. За кулисами он устанавливает значения свойствам после вызова конструктора. Таким способом невозможно создать неизменяемые типы. Поэтому часто приходится создавать конструкторы и использовать позиционный стиль. См. также «Использование Неизменяемых Структур Данных в C#»
Номинальное Создание в C# 9
В C# 9 для создания неизменяемых типов предложен новый вид свойств только для инициализации с использованием ключевого слова
init. Эти свойства могут быть установлены после выполнения конструктора, используя инициализатор объекта:public class Person {
  public string FirstName { get; init; }
  public string LastName { get; init; }
}
Person p = new Person { FirstName = "Charles", LastName = "Leclerc" };
Свойства только для инициализации могут быть установлены в момент создания объекта, но становятся доступными только для чтения после завершения создания объекта. Когда требуется проверка при задании свойства, ключевое слово init может использоваться для определения блока проверки, так же как get и set. Кроме того, иногда может требоваться более сложная проверка, затрагивающая комбинацию нескольких свойств. В таком случае можно использовать новый валидатор с блоком кода, обозначенным ключевым словом init:public class Person {
  public string FirstName { get; init; }
  public string LastName { get; init; }
 
  init {
    if (FirstName.Length + LastName.Length > 52)
      throw new Exception("…");
  }
}
Окончание следует…Источник: https://csharp.christiannagel.com/2020/04/21/c-9-positional-or-nominal-creation/
👍1
  