【问题标题】:Why do we need to use out keyword while calling a method为什么我们在调用方法时需要使用 out 关键字
【发布时间】:2010-06-18 06:42:58
【问题描述】:

当一个方法用out参数定义的时候,为什么我在调用的时候一定要指定out关键字。它已经存在于方法定义中,并且运行时应该知道传递的任何参数都是输出参数。

如果编译器接受带有或不带有 out 关键字的参数,具有不同的语义,这将是有意义的,但是如果您必须添加关键字才能使代码编译,那有什么用?编译器不应该自动处理吗?

参考相同

【问题讨论】:

  • 我猜,是为了让代码更具可读性。

标签: c# .net clr


【解决方案1】:

它的可读性非常好。 它还将帮助您避免意外行为。在不带参数的情况下调用方法时,您肯定会知道传递的变量的值是可以更改的。

【讨论】:

  • 如果你传递一个带有'out'的参数,不仅仅是'可以改变',它会被改变。方法返回前必须设置out参数。
  • 可以在方法体块中设置值,但我的意思是你可以设置相同的值,所以不会注意到任何变化。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    在这种情况下,如果您在调用方法时不写此关键字,编译器将无法理解应该调用带有关键字out 的方法。通常,当使用此关键字声明方法时,您应该写out

    当然,当你在调用方法时写out,你肯定知道这个变量可以在方法中改变。可读性很强。

    MSDN Article

    【讨论】:

      【解决方案4】:

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

      bool TryGetString(string input, out string output)
      

      无需指定 out 参数,只需简单地看一下调用该方法的人,因为它不会完整。

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-05-29
          • 2016-07-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多