C# 对象初始值设定项语法C
初始化对象时,哪种语法正确? 所有的示例都正常工作,但我不知道使用哪种语法以及何时使用每种语法。我总是使用语法1。使用这种语法比其他语法有什么优势吗C# 对象初始值设定项语法C,c#,syntax,initialization,C#,Syntax,Initialization,初始化对象时,哪种语法正确? 所有的示例都正常工作,但我不知道使用哪种语法以及何时使用每种语法。我总是使用语法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
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";
它们都是正确有效的语法。挑选你最喜欢的 前两个示例使用对象初始值设定项 对象初始值设定项允许您将值指定给任何可访问的字段或 创建时对象的属性,而不必调用 构造函数,后跟赋值语句行 第三步是首先构造对象,然后在单独的步骤中指定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和弹出堆栈
总之,没有明显的差异Syntax1和Syntax2是相同的。三者之间基本上没有性能差异。使用对象初始值设定项只是一种语法糖。您可以使用三个选项中的任意一个。这就是你写代码的方式,只要可读,我就使用字符最少的代码。我想说的是,选择你喜欢的,并坚持下去,即保持一致