引用C#-foo中的新赋值,是否使用相同的引用传播到其他函数

本文关键字:引用 函数 其他 传播 新赋值 C#-foo 赋值 是否 | 更新日期: 2023-09-27 18:00:59

我的基本问题是问,如果我在一个方法中更改ref的引用,它是否反映在另一个方法(如C++中的双指针(中?

method()
{
  referenceTypeInt t = new t(1);
  asyncCall foo(ref t);
  bar(ref t);
}
foo(ref a)
{
  a = new t(3);
}
bar (ref a)
{
  wait for 10 seconds/until foo finishes;
  Console.print ("t is" t.ToString())
}

上面是粗略的伪代码,但上面是3吗?

引用C#-foo中的新赋值,是否使用相同的引用传播到其他函数

ref通常就是这样工作的。

然而,这里可能有一点很糟糕。我不确定这是否:

asyncCall foo(ref t);

是新的异步CTP的伪代码(在这种情况下,它应该是await foo(ref t);(。如果这是一个使用新的async/await语法的异步方法调用,那么这将不起作用。refout参数在async方法中不受支持(类似于迭代器中不支持它们(。

是的,这就是引用的要点。它表示参数应被视为变量的别名,因此分配给它将改变变量本身。由于您在bar中再次引用,所以您有了另一个别名,所以更改反映在输出中。