什么时候在方法中使用 return 'this' 而不是 'void' 以及为什么?
When to return 'this' instead of 'void' in a method and why?
在修改自身的方法中返回对 'this' 对象的引用有什么好处(或缺点)?什么时候应该返回一个 'this' 来代替 void?
在看一个answer on code review stack exchange的时候,发现答案用了一个'return this'的自操作方法
简化 class 来自原始:
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>();
}
消费代码简化:
var fireSword = new Item("Lightbringer")
.AddComponent(new Valuable { Cost = 1000 })
.AddComponent(new PhysicalDamage { Slashing = 10 });
Related question 不同用户的回答似乎相互矛盾。
This question 也与引用在对象创建中使用的流畅接口的答案类似。
当 return 类型是我们正在应用该方法的当前对象时,返回 this
使用 fluent interface design, that is a special case of method chaining。
方法链也是functional programming的根源。
它被 Linq 扩展方法广泛使用 IEnumerable<>
和 IQueryable<>
。
它允许以链式方式在同一对象上调用方法,而无需为每个方法调用重复变量名。
因此,这会生成更短、更清晰且更易于维护的代码,错误源更少。
所以我们在需要时使用它。
在修改自身的方法中返回对 'this' 对象的引用有什么好处(或缺点)?什么时候应该返回一个 'this' 来代替 void?
在看一个answer on code review stack exchange的时候,发现答案用了一个'return this'的自操作方法
简化 class 来自原始:
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>();
}
消费代码简化:
var fireSword = new Item("Lightbringer")
.AddComponent(new Valuable { Cost = 1000 })
.AddComponent(new PhysicalDamage { Slashing = 10 });
Related question 不同用户的回答似乎相互矛盾。
This question 也与引用在对象创建中使用的流畅接口的答案类似。
当 return 类型是我们正在应用该方法的当前对象时,返回 this
使用 fluent interface design, that is a special case of method chaining。
方法链也是functional programming的根源。
它被 Linq 扩展方法广泛使用 IEnumerable<>
和 IQueryable<>
。
它允许以链式方式在同一对象上调用方法,而无需为每个方法调用重复变量名。
因此,这会生成更短、更清晰且更易于维护的代码,错误源更少。
所以我们在需要时使用它。