我一直试图找出某些东西的名字,但是如果不知道这个名字,我很难用谷歌搜索答案。这是一个很大的问题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);
有谁知道这叫什么?此外,我有理由避免这样做。我更喜欢上面的代码如何读取,而不是单独设置属性:
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);
大多数情况下,我想知道第一个例子的名称,以便我可以对它进行一些阅读。
答案 0 :(得分:10)
它被称为object initializer。
使用它们的一个潜在问题是在using语句中为对象使用对象初始值设定项时。如果任何属性设置器抛出异常,或者评估属性值的代码,则永远不会在对象上调用dispose。
例如:
using (Bling bling = new Bling{ThrowsException = "ooops"})
{
//Some code...
}
将创建Bling
的实例,但由于属性ThrowsException
会引发异常,因此永远不会调用Dispose
。
答案 1 :(得分:1)
正如@chibacity所说,它是一个对象初始化器。请记住,使用初始化程序不会绕过构造函数。仍然必须调用构造函数。
顺便说一句,如果您使用初始化程序的默认构造函数,则不需要()
。这也有效:
var tb_FirstName = new TextBox {
Location = new System.Drawing.Point(0, 0),
Name = "tb_FirstName",
Size = new System.Drawing.Size(100, 20),
TabIndex = 1
};