В чем разница при создании объекта с данными
className a = new className {id = "foo" , Name = "sass"}
и
className a = new className() {id="foo",Name="sass"}
Вызов new className вместо new className() не будет иметь значения. Они оба вызывают конструктор по умолчанию. Разница расстояний тоже не имеет значения.
new className
new className()
Оба сегмента кода переписываются компилятором во что-то, эквивалентное:
className a = new className(); a.id = "foo"; a.Name = "sass";
Сгенерированный код IL одинаков в обоих случаях:
IL_001f: newobj instance void C/ClassName::.ctor()
например
https://sharplab.io/#v2:C4LglgNgNAJiDUAfAAgJgIwFgBQyDMABGgQMIEDeOB1RhyALAQLIAUAlBVTdwG4CGAJwJ8CAXgIA7AKYB3UhD4BnRQDk+AWynsKASRhiCAIgBmAe1MB9HukMEoBNZoOHFSxVZsBfANxdu1fiEAIwNpORIFZUcpXX1xE3MrVFt7aOdXZSTDHz8CT1zc/CJUeTc03Mpsfxoi5HQABgI9CgBzKWBvRXbvfKrq2iIGhw0Y8jaOro7e/oGIspGWAGVgATAJFoJgNlzuSpnuZvEOnZpp/qK5qIXtvuryM+pezyA===
Нет разницы вообще. Однако вам потребуется скобка, если вы вызовете другой конструктор, например, когда не определен конструктор без параметров:
className a = new className(myParameter) {id="foo",Name="sass"};
, что невозможно в первом синтаксисе.
Ничего.Если у вас есть конструктор без параметров, он все равно вызывается. MS Docs