Раньше обязательные свойства часто приходилось передавать через конструктор или проверять уже во время выполнения.
🔵 В C# 11 появился required:
public class User
{
public required string Email { get; init; }
public required string Name { get; init; }
public int Age { get; init; }
}
🔵 Теперь компилятор не позволит создать объект без обязательных свойств:
var user = new User
{
Name = "Ada"
}; // ошибка компиляции
🔵 А такой вариант пройдёт:
var user = new User
{
Email = "ada@x.io",
Name = "Ada"
};
init дополняет эту конструкцию: свойство можно задать при создании объекта, но нельзя изменить обычным присваиванием после инициализации.
Если обязательные свойства заполняются внутри конструктора, можно использовать [SetsRequiredMembers], чтобы сообщить об этом компилятору.
required отвечает за обязательность при создании, а init — за запрет последующего присваивания 💡
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека шарписта
#sharp_view