因此,比较会之间:如果使用对象初始值设定项,性能是否会提高?
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
值仍然“第一1“ - 即shared
尚未分配新值。正如马克所说,你几乎肯定永远不会发现有什么不同。
匿名类型保证使用构造函数 - 表单在C#3语言规范的第7.5.10.6节中给出。
国际海事组织,值得使用绿色记号 – 2009-07-31 22:28:27
不,没有性能改进。在这种情况下,编译器将生成对相同属性和字段的赋值。它看起来就像你的扩展版本。
对于标准类型,它是完全糖。对于匿名类型,您可能会发现它在后台使用构造函数,但由于初始化程序语法只是的分配方式,所以这是一个有争议的问题。
这涉及到比一个特定的构造函数更多的调用 - 但如果你看到差异,我会是惊讶。只需使用初始化语法 - 这是友好的; -o
I'ts语法糖和编译器生成完全相同的IL像以前那样被引入在对象初始化.NET 3.5
哇,这一个真正吸引重打者,200K代表在第一4个答案。 – JeremyWeir 2009-08-01 07:05:28