Из MSDN
Инициализаторы объектов позволяют вам присваивать значения любым доступным полям или свойствам объекта во время создания без явного вызова конструктора.
Все это означает, что это удобный ярлык, который вы можете использовать, чтобы (надеюсь) сделать ваш код более читабельным.Пример, который они приводят:
Cat cat = new Cat { Age = 10, Name = "Fluffy" };
был бы более традиционно записан как:
Cat cat = new Cat();
cat.Age = 10;
cat.Name = "Fluffy";
или
Cat = new Cat(10, "Fluffy");
Первый может быть более длинным, а тамэто разница между скомпилированным кодом (спасибо @ Kirk Woll за ссылку), объясненная в этого поста .Инициализатор создает временную переменную, назначает свойства и затем копирует их в реальную переменную.Примерно так:
Cat temporaryCat = new Cat();
temporaryCat.Age = 10;
temporaryCat.Name = "Fluffy";
Cat cat = temporaryCat;
Последнее (до C # 4.0 с необязательными аргументами) потребовало бы иметь много перегруженных версий вашего конструктора для каждой возможной комбинации параметров.