c# – 如果使用对象初始化程序,是否有性能提升,还是令人惊讶?
发布时间:2020-12-15 06:47:42 所属栏目:百科 来源:网络整理
导读:所以,比较是: 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"; 和 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节中给出. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |