对象初始化程序语法C#[关闭]

问题描述 投票:-2回答:1

初始化对象时哪一个是正确的语法?所有样本都在工作,但我不知道哪个以及何时使用每种语法。我总是使用语法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";
c# syntax initialization
1个回答
0
投票

它们都是“适当的”(和有效的)语法。选择你最喜欢的

前两个示例使用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)

差异(在这个例子中)是堆叠的duppop

总之,没有明显的区别

© www.soinside.com 2019 - 2024. All rights reserved.