Нет, абсолютно без разницы.В обоих случаях вы используете выражение инициализатора объекта .Инициализаторы объектов были введены в C # 3.
В обоих случаях это точно эквивалентно:
// tmp is a hidden variable, effectively. You don't get to see it.
MyClass tmp = new MyClass();
tmp.firstProperty = "text";
tmp.secondProperty = "text";
// This is your "real" variable
MyClass calass = tmp;
Обратите внимание, как присвоение calass
происходит только после свойства были назначены - так же, как вы ожидаете от исходного кода.(В некоторых случаях я считаю, что компилятор C # может эффективно удалить дополнительную переменную и переставить назначения, но он должен заметно вести себя как этот перевод. Это, безусловно, может иметь значение, если вы переназначаете существующую переменную.)
РЕДАКТИРОВАТЬ: Небольшой тонкий момент о пропущении аргументов конструктора.Если вы это сделаете, это всегда эквивалентно включению пустого списка аргументов - но это , а не , что эквивалентно вызову конструктора без параметров.Например, могут быть необязательные параметры или массивы параметров:
using System;
class Test
{
int y;
Test(int x = 0)
{
Console.WriteLine(x);
}
static void Main()
{
// This is still okay, even though there's no geniune parameterless
// constructor
Test t = new Test
{
y = 10
};
}
}