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

裁判和出局有什么区别?(C)【副本】

c#
  •  3
  • Newbie  · 技术社区  · 17 年前

    有什么简明的解释吗?

    另请回答: Difference between ref and out parameters in .NET

    6 回复  |  直到 17 年前
        1
  •  19
  •   Jon Skeet    17 年前

    来电者:

    • 对于一个引用参数,变量必须已经被明确地赋值。
    • 对于out参数,变量不必被明确地赋值,而是在方法返回之后

    对于该方法:

    • 一个引用参数开始于明确指定的,而您没有 有 给它赋值
    • out参数 不 从明确指定的开始,你必须确保任何时候你返回(没有例外)它 将 被明确分配

    所以:

    int x;
    Foo(ref x); // Invalid: x isn't definitely assigned
    Bar(out x); // Valid even though x isn't definitely assigned
    Console.WriteLine(x); // Valid - x is now definitely assigned
    
    ...
    
    public void Foo(ref int y)
    {
        Console.WriteLine(y); // Valid
        // No need to assign value to y
    }
    
    public void Bar(out int y)
    {
        Console.WriteLine(y); // Invalid: y isn't definitely assigned
        if (someCondition)
        {
            // Invalid - must assign value to y before returning
            return;
        }
        else if (someOtherCondition)
        {
            // Valid - don't need to assign value to y if we're throwing
            throw new Exception();
        }
        else
        {
            y = 10;
            // Valid - we can return once we've definitely assigned to y
            return;
        }
    }
    
        2
  •  3
  •   Andrew Coleson    17 年前

    最简洁的观察方式:

    REF = IOUT

    出=出

        3
  •  2
  •   GEOCHET S.Lott    17 年前

    见 this 关于msdn的文章。实际上,他们都完成了微妙的不同的事情。

        4
  •  1
  •   David P    17 年前

    ref和out参数传递模式用于允许方法更改调用方传入的变量。裁判和出局之间的区别是微妙的,但很重要。每个参数传递模式都被设计为应用于稍微不同的编程场景。out和ref参数之间的重要区别是每个参数使用的明确分配规则。

    获取out参数的方法的调用方不需要分配给在调用之前作为out参数传递的变量;但是,在返回之前,被调用方需要分配给out参数。

    来源: MSDN

        5
  •  1
  •   tooleb    17 年前

    从Alex提到的msdn文章中,

    获取out参数的方法的调用方不需要分配给在调用之前作为out参数传递的变量;但是,在返回之前,被调用方需要分配给out参数。

    相反,REF参数最初由被调用方指定。因此,在使用之前,被调用方不需要分配给ref参数。

    综上所述,在方法内部,您可以考虑设置引用参数,但不能设置out参数——您必须设置这些参数。 在方法之外,它们的行为应该相同。

        6
  •  0
  •   Jon Skeet    17 年前

    看看这篇关于c中参数的jon skeet文章:

    http://www.yoda.arachsys.com/csharp/parameters.html