何时在方法中返回“this”而不是“void”,为什么?

Laz*_*tle 2 c# oop fluent-interface method-chaining

在修改自身的方法中返回对“this”对象的引用有什么好处(或缺点)?什么时候应该使用返回“this”而不是 void?

当查看代码审查堆栈交换的答案时,我注意到答案在自操作方法中使用了“返回此”。

原始类的简化:

class Item
{
    public Item(string name)
    {
        Name = name;
    }

    public string Name { get; private set; }

    public Item AddComponent(ItemComponent component)
    {
        _components.Add(component);
        return this;
    }

    private List<ItemComponent> _components = new List<ItemComponent>();
}
Run Code Online (Sandbox Code Playgroud)

使用代码简化:

var fireSword = new Item("Lightbringer")
                   .AddComponent(new Valuable { Cost = 1000 })
                   .AddComponent(new PhysicalDamage { Slashing = 10 });
Run Code Online (Sandbox Code Playgroud)

相关问题似乎不同用户的答案相互矛盾。

这个问题也与引用在对象创建中使用的流畅接口的答案类似。

小智 7

返回this是使用流畅的接口设计,这是方法链接的一种特殊情况,当返回类型是我们正在应用该方法的当前对象时。

方法链也是函数式编程的根源。

它被带有和的Linq扩展方法广泛使用。IEnumerable<>IQueryable<>

它允许以链式方式调用同一对象上的方法,而无需为每个方法调用重复变量名称。

因此,这会产生更短、更干净、更易于维护的代码,并且错误源更少。

所以当我们想要或需要的时候我们就使用它。