2010-06-18 83 views
8

当使用out参数定义方法时,为什么在调用方法时必须指定out关键字。它在方法定义中已经存在,并且运行时应该知道传递的任何参数都将是out参数。为什么我们需要在调用方法时使用关键字

如果编译器会接受带或不带关键字的参数,并且语义不同,但是如果您必须添加关键字以使代码编译,那么它有什么用?编译器不应该自动处理它?

与参考相同

+6

我想,这是为了使代码更易读。 – mohang 2010-06-18 06:46:23

回答

3

可能是因为C#允许你编写重载这样的:

class X 
{ 
    public void Y(int i) { ... } 
    public void Y(out int i) { ... } 
} 

在这种情况下编译无法理解与keywork out该方法应被调用,如果你当你打电话不写此关键字方法。当通过此keyworrd声明方法时,通常应该编写out

当然,当您在调用方法时编写out时,您明确知道可以在方法中更改此变量。它非常可读。

MSDN Article

11

这对于可读性来说确实很棒。 此外,它会帮助你避免意外的行为。使用out参数调用方法时,您肯定会知道传递变量的值可以更改。

+0

如果你传递一个参数'out',它将会被改变,不仅'可以改变'。在方法返回之前,必须设置Out参数。 – lxalln 2010-06-18 09:37:01

+1

在方法主体模块中设置是否可以设置值,但我的意思是您可以设置相同的值,以免发生变化。 – Incognito 2010-06-18 10:01:58

7

这个要求不是编译器的缘故。 f (x, out y)立即通知谁正在阅读代码y将在f返回后被覆盖,而不需要查找f的定义,从而为他们节省心智的CPU周期。

0

这是一个很好的观点,也许它与可读性有关。假设我们有两个参数的方法,像这样

bool TryGetString(string input, out string output) 

,而无需指定输出参数,只是简单的看看别人调用该方法时,它不会做,因为完整。

0

当您调用out关键字的方法时,您的调用代码肯定知道它是通过引用传递的。在某些情况下,当您调用该方法时,您可能会在第三方库中遇到关键字定义为out的方法,但您不知道该参数是否通过引用或值传递。所以你不得不在调用方法中使用out进行readability。

相关问题