gpt4 book ai didi

C#:为方法嵌套返回 'this'?

转载 作者:可可西里 更新时间:2023-11-01 07:52:46 24 4
gpt4 key购买 nike

我有一个类,我必须多次调用一个或两个方法。这些方法当前返回 void。我在想,让它返回 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 并认为我会使用它的那个,但我很好奇想知道其他人对这种情况的看法。什么是最佳实践。

最佳答案

“返回此”样式有时称为 fluent interface并且是一种常见的做法。

关于C#:为方法嵌套返回 'this'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/781648/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com