2009-04-08 74 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會變成你的新對象。第二,它沒有。