var dlg = new Microsoft.Win32.OpenFileDialog
{
Title = "Select configuration",
DefaultExt = ".xml",
Filter = "XML-file (.xml)|*.xml",
CheckFileExists = true
};
我从this帖子中获得了上述内容。是大括号内的部分,通过访问器分配值。似乎没有构造函数,因此是否暗示会调用默认构造函数,然后分配属性值。
最佳答案
您所显示的称为object initializer,这是C#3.0中引入的语法功能。
它类似于以下代码,该代码在第一行中创建一个对象,然后在后续各行中分别设置其属性:
var dlg = new Microsoft.Win32.OpenFileDialog();
dlg.Title = "Select configuration";
dlg.DefaultExt = ".xml";
dlg.Filter = "XML-file (.xml)|*.xml";
dlg.CheckFileExists = true;
但是,它与上面的代码不同。使用对象初始化程序时,编译器将创建一个临时变量,在该临时变量中包含的对象上设置属性,然后将该临时变量分配给您声明的实数变量。最终结果是对象实例的创建是原子的。 this question的答案和this blog post中提供了更多详细信息。
在实践中,您可以想象得到的代码在完全扩展后看起来像这样:
var temporaryDlg = new Microsoft.Win32.OpenFileDialog();
temporaryDlg.Title = "Select configuration";
temporaryDlg.DefaultExt = ".xml";
temporaryDlg.Filter = "XML-file (.xml)|*.xml";
temporaryDlg.CheckFileExists = true;
var dlg = temporaryDlg;
关于您有关调用哪个构造函数的问题,是的,这是两种情况下的默认构造函数。第一行是对构造函数的调用,当它显示
new
时。您可以说这是默认构造函数,因为没有参数传入。