我有一门课,我必须多次调用一两个方法。当前返回的方法void
。我在想,最好让它 return this
,以便方法可以嵌套?或者这被认为是非常非常非常糟糕?或者如果不好,如果它返回一个相同类型的新对象会更好吗?或者你怎么看?例如,我创建了三个版本的加法器类:
// Regular
class Adder
{
public Adder() { Number = 0; }
public int Number { get; private set; }
public void Add(int i) { Number += i; }
public void Remove(int i) { Number -= i; }
}
// Returning this
class Adder
{
public Adder() { Number = 0; }
public int Number { get; private set; }
public Adder Add(int i) { Number += i; return this; }
public Adder Remove(int i) { Number -= i; return this; }
}
// Returning new
class Adder
{
public Adder() : this(0) { }
private Adder(int i) { Number = i; }
public int Number { get; private set; }
public Adder Add(int i) { return new Adder(Number + i); }
public Adder Remove(int i) { return new Adder(Number - i); }
}
第一个可以这样使用:
var a = new Adder();
a.Add(4);
a.Remove(1);
a.Add(7);
a.Remove(3);
其他两个可以这样使用:
var a = new Adder()
.Add(4)
.Remove(1)
.Add(7)
.Remove(3);
唯一的区别是,a
在第一种情况下是new Adder()
后者,而在后一种情况下,它是最后一种方法的结果。
第一个我发现它很快就变得......一遍又一遍地写很烦人。所以我想使用其他版本之一。
第三种工作方式与许多其他方法类似,例如许多 String 方法和 IEnumerable 扩展方法。我想这有其积极的一面,你可以做类似的事情var a = new Adder(); var b = a.Add(5);
,然后一个是 0,一个是 5。但与此同时,一直创建新对象不是有点贵吗?第一个物体什么时候会死?第一种方法什么时候返回?或者?
无论如何,我喜欢返回this
并认为我会使用它的那个,但我很想知道其他人对此案的看法。什么被认为是最佳实践。