代码之家  ›  专栏  ›  技术社区  ›  Midhat

为什么在调用方法时需要使用out关键字

  •  8
  • Midhat  · 技术社区  · 14 年前

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

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

    与裁判相同

    5 回复  |  直到 14 年前
        1
  •  3
  •   Pavel Belousov    14 年前

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

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

    在这种情况下,compiles无法理解带有keywork的方法 out 如果在调用方法时不编写此关键字,则应调用。一般来说你应该写 外面的 当方法用此关键字声明时。

    当然,当你写作的时候 外面的 当您调用方法时,您明确地知道这个变量可以在方法中更改。它可读性很强。

    MSDN Article

        2
  •  11
  •   Incognito    14 年前

    它非常适合可读性。 它还可以帮助您避免意外的行为。当使用out-param调用方法时,您肯定知道可以更改传递变量的值。

        3
  •  7
  •   Anton Tykhyy    14 年前

    为了编译器的缘故,这个要求并不存在。 f (x, out y) 立即通知正在读取代码的人 y 将在之后被覆盖 f 返回,无需查找 f ,节省了他们的精神CPU周期。

        4
  •  0
  •   Meiscooldude    14 年前

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

    bool TryGetString(string input, out string output)
    

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

        5
  •  0
  •   this. __curious_geek    14 年前

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