初始化对象时哪一个是正确的语法?所有样本都在工作,但我不知道哪个以及何时使用每种语法。我总是使用语法1.使用这种语法比其他语法有什么优势吗?
public class X {
public string Y { get; set; }
}
// Syntax 1
var z = new X () { Y = "Sample Text" };
// Syntax 2
var z = new X { Y = "Sample Text" };
// Syntax 3
var z = new X();
z.Y = "Sample Text";
它们都是“适当的”(和有效的)语法。选择你最喜欢的
前两个示例使用Object Initializers
Object and Collection Initializers (C# Programming Guide)
对象初始值设定项允许您在创建时为任何可访问的字段或属性赋值,而无需调用构造函数后跟赋值语句行。
第三个是首先构造对象并在单独的步骤中分配Y
属性
--
编译IL到初始化表单
IL_0000: newobj instance void C/X::.ctor()
IL_0005: dup
IL_0006: ldstr "Sample Text"
IL_000b: callvirt instance void C/X::set_Y(string)
IL_0010: pop
编译IL到显式声明
IL_0000: newobj instance void C/X::.ctor()
IL_0005: ldstr "Sample Text"
IL_000a: callvirt instance void C/X::set_Y(string)
差异(在这个例子中)是堆叠的dup
和pop
总之,没有明显的区别