【发布时间】:2010-06-18 06:42:58
【问题描述】:
当一个方法用out参数定义的时候,为什么我在调用的时候一定要指定out关键字。它已经存在于方法定义中,并且运行时应该知道传递的任何参数都是输出参数。
如果编译器接受带有或不带有 out 关键字的参数,具有不同的语义,这将是有意义的,但是如果您必须添加关键字才能使代码编译,那有什么用?编译器不应该自动处理吗?
参考相同
【问题讨论】:
-
我猜,是为了让代码更具可读性。
当一个方法用out参数定义的时候,为什么我在调用的时候一定要指定out关键字。它已经存在于方法定义中,并且运行时应该知道传递的任何参数都是输出参数。
如果编译器接受带有或不带有 out 关键字的参数,具有不同的语义,这将是有意义的,但是如果您必须添加关键字才能使代码编译,那有什么用?编译器不应该自动处理吗?
参考相同
【问题讨论】:
它的可读性非常好。 它还将帮助您避免意外行为。在不带参数的情况下调用方法时,您肯定会知道传递的变量的值是可以更改的。
【讨论】:
为了编译器,这个要求不存在。 f (x, out y) 立即通知正在阅读代码的人 y 将在 f 返回后被覆盖,而无需查找 f 的定义,从而节省了他们的脑力 CPU 周期。
【讨论】:
可能是因为 C# 允许您像这样编写重载:
class X
{
public void Y(int i) { ... }
public void Y(out int i) { ... }
}
在这种情况下,如果您在调用方法时不写此关键字,编译器将无法理解应该调用带有关键字out 的方法。通常,当使用此关键字声明方法时,您应该写out。
当然,当你在调用方法时写out,你肯定知道这个变量可以在方法中改变。可读性很强。
【讨论】:
这是一个很好的观点,也许它与可读性有关。假设我们有一个带有两个参数的方法,就像这样
bool TryGetString(string input, out string output)
无需指定 out 参数,只需简单地看一下调用该方法的人,因为它不会完整。
【讨论】:
当您使用out 关键字调用方法时,您的调用代码肯定知道它是通过引用传递的。在某些情况下,当您调用该方法时,您可能会遇到第 3 方库中定义有 out 关键字的方法,您不知道参数是通过引用传递还是通过值传递。所以为了可读性,你不得不在调用方法中使用out。
【讨论】: