передача объекта по ссылке - PullRequest
3 голосов
/ 08 апреля 2009

В чем разница между

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

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

по сути, в чем смысл "ref". разве объект не всегда по ссылке?

Ответы [ 2 ]

10 голосов
/ 08 апреля 2009

Дело в том, что вы никогда не пропустите объект . Вы передаете ссылку - и сам аргумент может быть передан по ссылке или значению. Они ведут себя по-разному, если вы измените само значение параметра, например, установив его на null или на другую ссылку. С ref это изменение влияет на переменную вызывающего; без ref это была только копия переданного значения, поэтому вызывающая сторона не видит никаких изменений в их переменной.

См. мою статью о передаче аргументов для получения более подробной информации.

9 голосов
/ 08 апреля 2009

Да. Но если бы вы сделали это:

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

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

тогда вы увидите разницу. Первый передает ссылку на ссылку, и поэтому в этом случае панель изменяется на новый объект. Во втором - нет.

...