关于C#深度第二的不变性和对象初始化的问题.ed(MEAP)

veh*_*zzz 0 .net c#

所以我开始深入阅读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)

关于这个主题的详细说明将有很大帮助!

有人会解释一下吗?

Jon*_*eet 5

这段代码:

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在构造函数中指定一个参数),你可以在一个地方.可爱.

  • 你认为*你喜欢它 - 我喜欢讨论我的写作:) (3认同)