按引用传递与按值传递结果

Pass by Reference vs Pass by value result

通过引用调用为形式参数创建别名,因此典型参数的每次更改也会影响形式参数,而传递值-结果将结果复制到典型参数,并且当函数 returns ,它将典型参数复制到正式参数。(注意按值调用结果与按值调用完全不同)。

除了这两种传参方式在实现上的区别外,我觉得最后的结果应该是一样的。

我的问题是这两种方法是否总是给出相同的结果,或者您能否举例说明这两种方法 return 不同的结果?

如果在方法执行过程中读取原始变量,情况会有所不同。这可能是因为:

  • 两个参数均使用相同的基础变量提供
  • 该方法调用了更多从原始变量读取的代码
  • 涉及其他线程

这是一个 C# 示例:

using System;

class Test
{
    static void Main()
    {
        int p = 10;
        Foo(ref p, () => Console.WriteLine(p));
    }

    static void Foo(ref int x, Action action)
    {
        action();
        x = 20;
        action();
    }
}

这个输出是

10
20

... 因为在第二次调用action()的时候,p的值已经变成了20,如果使用pass-by-result的话,[=13的值=] 只会在 Foo 返回时改变。