What is the difference between
public function Foo(ref Bar bar)
{
bar.Prop = 1;
}
public function Foo(Bar bar)
{
bar.Prop = 1;
}
essentially what is the point of "ref". isn't an object always by reference?
What is the difference between
public function Foo(ref Bar bar)
{
bar.Prop = 1;
}
public function Foo(Bar bar)
{
bar.Prop = 1;
}
essentially what is the point of "ref". isn't an object always by reference?
Yes. But if you were to do this:
public function Foo(ref Bar bar)
{
bar = new Bar();
}
public function Foo(Bar bar)
{
bar = new Bar();
}
then you'd see the difference. The first passes a reference to the reference, and so in this case bar gets changed to your new object. In the second, it doesn't.
The point is that you never actually pass an object. You pass a reference - and the argument itself can be passed by reference or value. They behave differently if you change the parameter value itself, e.g. setting it to null
or to a different reference. With ref
this change affects the caller's variable; without ref
it was only a copy of the value which was passed, so the caller doesn't see any change to their variable.
See my article on argument passing for more details.