初始化对象时,哪种语法合适? 所有示例都在工作,但我不知道使用哪种语法以及何时使用每种语法。我总是使用语法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";
答案 0 :(得分:0)
它们都是“适当的”(有效)语法。选择您喜欢的
前两个示例使用对象初始化程序
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
总而言之,没有明显的差异