Class c = new Class( { Prop = "Initial" } );
Run Code Online (Sandbox Code Playgroud)
我上面的课.你会如何创建一个方法来修改它?
public Class ModifyIt(Class c)
{
c.Prop = "changed";
return c;
}
Run Code Online (Sandbox Code Playgroud)
要么
public void ModifyIt(Class c)
{
c.Prop = "changed";
}
Run Code Online (Sandbox Code Playgroud)
然后像这样打电话......
Class c = ModifyIt(c);
Console.WriteLine(c.Prop);
// changed
Run Code Online (Sandbox Code Playgroud)
或这个
ModifyIt(c)
Console.WriteLine(c.Prop);
// changed
Run Code Online (Sandbox Code Playgroud)
你的偏好是什么?
就个人而言,我更喜欢命令查询分离 - 即,返回结果的方法不应该是mutator,反之亦然.我理解return this人群的争论,即"链接"电话的简易性:
foo.ChangeThis(23).ChangeThat(45).AndAlso(67);
Run Code Online (Sandbox Code Playgroud)
但是将这些案例编码为绝对不是太糟糕
var x=foo;
x.ChangeThis(23); x.ChangeThat(45); x.AndAlso(67);
Run Code Online (Sandbox Code Playgroud)
同时,"命令查询分离"的优势(在绝大多数情况下,虽然不可否认,不是100%),正如wikipeida网址所讨论的那样,忍受......
第一种方式(在更改项目后实际上返回该项目)的最酷之处在于它允许方法链接。这意味着你可以做这样的事情:
c.ModifyIt("hello").MessWithIt("World").ReallyScrewWithIt("!!!");
Run Code Online (Sandbox Code Playgroud)
如果它对您的特定类有意义,您可以预见需要链接,则返回该实例。如果没有,那么你可以让它无效。StringBuilder 类就是一个很好的例子,它允许您执行以下操作:
myStringBuilder.Replace("!", "?").Append("Something").Remove(4,3);
Run Code Online (Sandbox Code Playgroud)