之间有什么区别
public function Foo(ref Bar bar)
{
bar.Prop = 1;
}
public function Foo(Bar bar)
{
bar.Prop = 1;
}
基本上“ref”的意思是什么。是不是总是通过引用的对象?
答案 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会更改为新对象。在第二个,它没有。