2009-04-08 72 views
3

有什么本质上的是“参考”点在物体通过由参

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

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

之间的差异。是不是一直引用的对象?

回答

10

问题是,你永远不会通过一个对象。您通过参考 - 而参数本身可以通过引用或值传递。如果你改变参数值本身,它们的行为会有所不同,例如将其设置为null或另一个参考。用ref这个改变会影响调用者的变量;没有ref它只是一个拷贝被传递的值,所以调用者看不到他们变量的任何改变。

查看my article on argument passing了解更多详情。

+0

我想你的意思是“argumetn本身可以通过引用或值传递”,而不是“通过参数或值”。或者我的词汇错了? – erikkallen 2009-04-08 11:22:35

9

是的。但如果你这样做:

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

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

然后你会看到不同之处。第一个传递给引用的引用,所以在这种情况下bar会变成你的新对象。第二,它没有。