User user1 = new User { Name = "Tom", Age = 33 };
Почему в конструкторе используются фигурные скобки?
Интуиция мне говорит что это связано со свойствами.
Формально выражение создания объекта определяется следующей грамматикой
выражение-создания-объекта:
new тип ( список аргументов ) инициализатор-объекта
new тип инициализатор объекта
где инициализатор объекта в свою очередь определяется как
Инициализатор-объекта:
{ список-инициализаторов-элементов }
То есть в этом предложении
User user1 = new User { Name = "Tom", Age = 33 };
выполняются две вещи. Первое - это вызывается конструктор по умолчанию, а затем свойствам Name и Age в инициализаторе объекта присваиваются значения. Эта строка аналогична следующему коду:
User user1 = new User();
user1.Name = "Tom";
user1.Age = 33;
При этом свойства Name И Age должны быть доступны, например, объявлены с модификатором public.
Вы можете также использовать в этой конструкции конструктор с параметрами и вполне возможно, что конструктор также инициализирует эти свойства, но их значения в конечном итоге будут переписаны значениями в из инициализатора объекта.
Такая форма удобна при работе со структурами, когда имеется только конструктор по умолчанию, и вы можете в одном предложении вызвать этот конструктор и инициализировать поля структуры, а не писать несколько предложений с отдельными присваиваниями.
В данном случае Вы инициализируете свойства Вашего объекта. В этом нет ничего странного. Если бы Вы написали параметризированный конструктор
User(string name, int age)
{
Name = name;
Age = age;
}
И вызвали его при создании экземпляра класса
User user1 = new User("Tom", 33);
То результат был бы идентичным, инициализация свойств Name и Age. Но в них есть некоторые отличия. При использовании инициализатора { } и конструктора по умолчанию (Можно вызывать любой конструктор, но в большинстве случаев в этом нет необходимости) - в свойствах будут записаны те значения, которые объявлялись в инициализаторе.
User user1 = new User(){ Name = "Vasilii", Age = 45 };
Так происходит потому что значения описанные в инициализаторе присваиваются после вызова конструктора.
Или же это делается для простоты понимания Вашего кода. Ведь согласитесь, что такой код
User user1 = new User { Name = "Tom", Age = 33 };
выглядит лучше и компактнее, чем
User user1 = new User();
user1.Name = "Tom";
user1.Age = 33;
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости