2009-04-08 13 views
3

Was ist der Unterschied zwischenvorbei in Objekt durch ref

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

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

im Wesentlichen, was der Punkt des „ref“ ist. ist ein Objekt nicht immer als Referenz?

Antwort

10

Der Punkt ist, dass Sie nie tatsächlich ein Objekt übergeben. Sie übergeben eine Referenz - und das Argument selbst kann durch Referenz oder Wert übergeben werden. Sie verhalten sich anders, wenn Sie den Parameterwert selbst ändern, z. Setzen Sie es auf null oder auf eine andere Referenz. Mit ref beeinflusst diese Änderung die Variable des Aufrufers; Ohne ref war es nur eine Kopie des Wertes, der übergeben wurde, so dass der Aufrufer keine Änderung an ihrer Variablen sieht.

Weitere Informationen finden Sie unter my article on argument passing.

+0

Ich denke, Sie meinen "Argumetn selbst kann durch Referenz oder Wert übergeben werden" und nicht "durch Parameter oder Wert". Oder ist mein Vokabular falsch? – erikkallen

+0

@erikkallen: Tippfehler - behoben, danke. –

9

Ja. Aber wenn Sie dies tun würden:

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

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

dann würden Sie den Unterschied sehen. Die erste übergibt einen Verweis auf die Referenz, und in diesem Fall wird die Leiste in Ihr neues Objekt geändert. In der zweiten nicht.