我不知道这个c#模式/结构/代码被调用了什么

Chr*_*ide 2 c# initialization

我一直试图找出某些东西的名字,但是如果不知道这个名字,我很难用谷歌搜索答案.这有点像是一个问题22.我希望如果我发布一个例子,那里的某个人可能会认出它.

基本上,它是一种初始化对象的任意数量的公共属性的方法,而不使用构造函数.

例如,如果我想在winform中动态添加文本框,我可以:

System.Windows.Forms.TextBox tb_FirstName = new System.Windows.Forms.TextBox()
{
    Location = new System.Drawing.Point(0, 0),
    Name = "tb_FirstName",
    Size = new System.Drawing.Size(100, 20),
    TabIndex = 1
};
frm_MyForm.Controls.Add(tb_FirstName);
Run Code Online (Sandbox Code Playgroud)

有谁知道这叫什么?此外,我有理由避免这样做.我更喜欢上面的代码如何读取,而不是单独设置属性:

System.Windows.Forms.TextBox tb_FirstName = new System.Windows.Forms.TextBox();
tb_FirstName.Location = new System.Drawing.Point(0, 0);
tb_FirstName.Name = "tb_FirstName";
tb_FirstName.Size = new System.Drawing.Size(100, 20);
tb_FirstName.TabIndex = 1;

frm_MyForm.Controls.Add(tb_FirstName);
Run Code Online (Sandbox Code Playgroud)

大多数情况下,我想知道第一个例子的名称,以便我可以对它进行一些阅读.

Tim*_*oyd 10

它被称为对象初始化器.

使用它们的一个潜在问题是在using语句中为对象使用对象初始值设定项时.如果任何属性设置器抛出异常,或者评估属性值的代码,则永远不会在对象上调用dispose.

例如:

        using (Bling bling = new Bling{ThrowsException = "ooops"})
        {
            //Some code...
        }
Run Code Online (Sandbox Code Playgroud)

Bling将创建一个实例,但由于属性ThrowsException抛出异常,Dispose因此永远不会被调用.