gpt4 book ai didi

c# - 为什么 C# 属性初始值设定项 (new()) 是这样写的?

转载 作者:行者123 更新时间:2023-11-30 19:27:18 24 4
gpt4 key购买 nike

    Info myPath = new Info()
{
path = oFile.FileName
};
...
class Info
{
public string path;
public string Path
{
get { return path; }
set { path = value; }
}
}

以上是某程序的C#代码,可以正常运行。但我不太明白。第一个问题,为什么path = oFile.FileName不写成path = oFile.FileName;?为什么分号可以去掉?

第二个问题是为什么我不能这样写:myPath.path = oFile.FileName? Visual Studio 2012 会给出错误信息。

最佳答案

该构造是一个 object initializer .它不是任意语句的列表 - 它只是字段和属性的初始化,它们以逗号分隔:

Foo x = new Foo // Implicitly calls the parameterless constructor
{
Property1 = value1,
Property2 = value2
};

这是简写:

Foo tmp = new Foo();
tmp.Property1 = value1;
tmp.Property2 = value2;
Foo x = tmp;

C# 3 中引入了对象初始化器,以及 集合初始化器,它们是重复调用 Add 的有效语法糖。所以:

List<string> names = new List<string>
{
"Foo", "Bar"
};

相当于:

List<string> tmp = new List<string>();
tmp.Add("Foo");
tmp.Add("Bar");
List<string> names = tmp;

关于c# - 为什么 C# 属性初始值设定项 (new()) 是这样写的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18915379/

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