通过ref传递对象

时间:2009-04-08 11:12:04

标签: c# .net ref

之间有什么区别
public function Foo(ref Bar bar)
{
   bar.Prop = 1;
}

public function Foo(Bar bar)
{
   bar.Prop = 1;
}

基本上“ref”的意思是什么。是不是总是通过引用的对象?

2 个答案:

答案 0 :(得分:10)

重点是你从未真正传递对象。您传递引用 - 参数本身可以通过引用或值传递。如果您更改参数值本身,它们的行为会有所不同,例如将其设置为null或其他参考。使用ref时,此更改会影响调用者的变量;没有ref它只是传递的值的副本,因此调用者看不到对其变量的任何更改。

有关详细信息,请参阅my article on argument passing

答案 1 :(得分:9)

是。但如果你这样做:

public function Foo(ref Bar bar)
{
   bar = new Bar();
}

public function Foo(Bar bar)
{
    bar = new Bar();
}
然后你会看到差异。第一个传递对引用的引用,因此在这种情况下,bar会更改为新对象。在第二个,它没有。