Dan*_*dor 5 .net c# visual-studio-2008
我有这个:
AudioPlayer player = new AudioPlayer();
player.Directory = vc.Directory;
player.StartTime = vc.StarTime;
player.EndTime = vc.EndTime;
Run Code Online (Sandbox Code Playgroud)
但我可以这样:
AudioPlayer player = new AudioPlayer
{
Directory = vc.Directory,
StartTime = vc.StarTime,
EndTime = vc.EndTime
};
Run Code Online (Sandbox Code Playgroud)
如果我转换为"新的写作方式",除了不可读之外我还能获得什么?它会让我更接近lambda函数(=>)吗?
它与RAII有关吗?
加成:
有人回答说,正常的初始化可能会使对象处于"无效"状态,例如只设置一个Directory属性 - 我在这里观察的是设计对象的人可能是设计它的方式,只有那些必须真正输入的值才是通过真正的构造函数输入,所有其他可以在以后自由修改.
Ste*_*ven 10
有了这么简单的例子,你的确得不到多少.但是,当你有这个时,它会有所不同:
var player = new AudioPlayer
{
Car = new Car()
{
WheelSize = new Inch(21),
Driver = new Person()
{
Age = 53,
Type = LicenseType.B,
Family =
{
new Person("Jane"),
new Person("Pieter"),
new Person("Anny")
}
}
}
Directory = vc.Directory,
StartTime = vc.StarTime,
EndTime = vc.EndTime
};
Run Code Online (Sandbox Code Playgroud)
尝试用旧方法做到这一点.它变得非常难看.
考虑您想要将新创建的对象传递给某个方法(而不用它做任何其他事情)。您可以按照旧的方式编写它:
\n\nAudioPlayer player = new AudioPlayer();\nplayer.Directory = vc.Directory;\nplayer.StartTime = vc.StarTime;\nplayer.EndTime = vc.EndTime;\nsome.Method(player);\nRun Code Online (Sandbox Code Playgroud)\n\n或者您可以使用对象初始值设定项:
\n\nsome.Method(\n new AudioPlayer\n {\n Directory = vc.Directory,\n StartTime = vc.StarTime,\n EndTime = vc.EndTime\n });\nRun Code Online (Sandbox Code Playgroud)\n\n使用对象初始化程序,您可以清楚地看到代码的作用以及稍后不会使用该对象。
\n\n另外,我认为可读性(和 \xe2\x80\x9cwritability\xe2\x80\x9d)更好:你不必无休止地重复变量名称。
\n| 归档时间: |
|
| 查看次数: |
266 次 |
| 最近记录: |