【发布时间】:2024-05-01 13:05:02
【问题描述】:
这两种方法有区别吗?
public class A
{
public int Count { get; set; }
}
public A Increment(A instance)
{
instance.Count++;
return instance;
}
public void Increment(A instance)
{
instance.Count++;
}
我的意思是,除了一个方法返回相同的引用而另一种方法不返回任何内容之外,它们都完成相同的事情,以增加作为参数传递的引用的 Count 属性。
使用一个来对抗另一个有优势吗?由于方法链接,我通常倾向于使用前者,但是否存在性能权衡?
例如,后一种方法的一个优点是不能创建新的引用:
public void Increment(A instance)
{
instance.Count++;
instance = new A(); //This new object has local scope, the original reference is not modified
}
这可以被认为是针对接口的新实现的一种防御方法。
我不希望这是基于意见的,所以我明确地从文档或语言规范中寻找具体的优点(或缺点)。
【问题讨论】:
-
我不明白您所说的无法创建新参考是什么意思。该示例似乎与
Increment是否有返回值无关。 -
我会说使用
public A Increment(A instance)是引用类型的弊端,除非你正在做cloing(或节点之类的东西 - getsiblingnode 等) -
@ChrisMantle 如果
Increment可以返回A 的一个实例,那么可以执行以下操作:return new A();,并且该方法的使用者最终会得到一个新的引用。具有void的返回类型可以避免这些情况。 -
第一个被称为流利设计。它允许像
int count = Increment(instance).Count;这样的链接,尽管您通常使用相关类型的实例方法来执行此操作,并且它返回对this的引用。