对象初始化语法C#

时间:2019-03-19 03:55:03

标签: 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 = new X();
z.Y = "Sample Text";

1 个答案:

答案 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)

(在此示例中)差异是堆栈中的duppop

总而言之,没有明显的差异