Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对象初始值设定项语法C_C#_Syntax_Initialization - Fatal编程技术网

C# 对象初始值设定项语法C

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

初始化对象时,哪种语法正确? 所有的示例都正常工作,但我不知道使用哪种语法以及何时使用每种语法。我总是使用语法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";

它们都是正确有效的语法。挑选你最喜欢的

前两个示例使用对象初始值设定项

对象初始值设定项允许您将值指定给任何可访问的字段或 创建时对象的属性,而不必调用 构造函数,后跟赋值语句行

第三步是首先构造对象,然后在单独的步骤中指定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是相同的。三者之间基本上没有性能差异。使用对象初始值设定项只是一种语法糖。您可以使用三个选项中的任意一个。这就是你写代码的方式,只要可读,我就使用字符最少的代码。我想说的是,选择你喜欢的,并坚持下去,即保持一致