gpt4 book ai didi

c# - 此代码是否在对象创建后不久通过访问器设置值

转载 作者:行者123 更新时间:2023-11-30 19:47:53 25 4
gpt4 key购买 nike

var dlg = new Microsoft.Win32.OpenFileDialog
{
Title = "Select configuration",
DefaultExt = ".xml",
Filter = "XML-file (.xml)|*.xml",
CheckFileExists = true
};

我从 this 得到了上面的 got邮政。是花括号内的部分通过访问器赋值。似乎没有构造函数,这是否意味着调用默认构造函数然后分配属性值。

最佳答案

您显示的内容称为 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 时。您可以看出它是默认构造函数,因为没有传入任何参数。

关于c# - 此代码是否在对象创建后不久通过访问器设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6015934/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com