所以我开始深入阅读Jon Skeet的第二版C#,并对以下代码的含义和它有什么问题感到困惑(第13章,部分:不变性和对象初始化)
Message message = new Message(
"skeet@pobox.com",
"csharp-in-depth-readers@everywhere.com",
"I hope you like the second edition")
{
Subject = "A quick message" // <= {Subject = "A quick message" }; what is it?
};
Run Code Online (Sandbox Code Playgroud)
关于这个主题的详细说明将有很大帮助!
有人会解释一下吗?
这段代码:
Message message = new Message(
"skeet@pobox.com",
"csharp-in-depth-readers@everywhere.com",
"I hope you like the second edition")
{
Subject = "A quick message"
};
Run Code Online (Sandbox Code Playgroud)
相当于:
Message tmp = new Message("skeet@pobox.com",
"csharp-in-depth-readers@everywhere.com",
"I hope you like the second edition");
tmp.Subject = "A quick message";
Message message = tmp;
Run Code Online (Sandbox Code Playgroud)
这只是对象初始化器语法:有关更多详细信息,请参阅第8章.
这个问题是:
使用可选参数和命名参数,所有这些都解决了:
// The argument names may be wrong here; I don't have the book with me.
// Intellisense will prompt you though :)
Message message = new Message(
from: "skeet@pobox.com",
to: "csharp-in-depth-readers@everywhere.com",
body: "I hope you like the second edition",
subject: "A quick message);
Run Code Online (Sandbox Code Playgroud)
很清楚什么意思是什么,它只是在构造函数调用中所以类型可以是不可变的,你可以有一个带有可选参数的构造函数(例如,这里我们可以byte[] attachment = null在构造函数中指定一个参数),你可以在一个地方.可爱.