所以,比较是:
MyClass foo = new MyClass(); foo.Property1 = 4; foo.Property2 = "garfield";
和
MyClass foo = new MyClass { Property1 = 4,Property2 = "garfield" };
是句法糖,还是实际上有某种表现获得(不过很可能呢?)
解决方法
使用对象初始化程序实际上可能非常慢,而不是调用构造函数,然后分配属性,因为它具有一个额外的赋值:
MyClass foo = new MyClass(); foo.Property1 = 4; foo.Property2 = "garfield";
VS
MyClass tmp = new MyClass(); tmp.Property1 = 4; tmp.Property2 = "garfield"; MyClass foo = tmp;
在将引用分配给变量之前,所有属性都被分配.如果它重用一个变量,这个区别是可见的:
using System; public class Test { static Test shared; string First { get; set; } string Second { set { Console.WriteLine("Setting second. shared.First={0}",shared == null ? "n/a" : shared.First); } } static void Main() { shared = new Test { First = "First 1",Second = "Second 1" }; shared = new Test { First = "First 2",Second = "Second 2" }; } }
输出显示在Main的第二行,当Second被设置(First)之后,shared.First的值仍然是“First 1”,即共享尚未被赋值.
正如马克说的那样,你几乎肯定永远都不会有区别.
匿名类型保证使用构造函数 – 表单在C#3语言规范的7.5.10.6节中给出.