Назначение параметра ref для веб-службы

Хорошо, у меня есть пример кода, который я должен пройти, чтобы использовать пример того, как использовать продукт... и у меня есть этот код:

protected void checkout_Click(object sender, EventArgs e)
{
    OurWebServiceClient client = new OurWebServiceClient();
    this.session = client.BindAccount(ref this.session);
    client.FinalizeSession(this.session);
    client.Close();
    this.checkout.Text = "success";
    this.checkout.Enabled = false;
}

Так что этот код немного странен для меня по разным причинам, но строка, которая выделяется, это вторая строка в методе:

this.session = client.BindAccount(ref this.session);

Это ссылка, поэтому this.session может фактически указывать на другой объект после вызова. За исключением того, что они присваивают this.session значению, возвращаемому из вызова, сдувая (насколько я могу судить) все, что они получили, имея его в качестве ссылки. И что вообще означает передача переменной ref в веб-службу?


person Beska    schedule 27.09.2012    source источник
comment
+1 это действительно сбивает с толку, и если оно действительно используется, то, безусловно, запутывает код. Но на самом деле я пришел, чтобы проголосовать за ваш гениальный комментарий к ныне закрытому вопросу о техноболтовне. :)   -  person El Ronnoco    schedule 28.09.2012
comment
@ElRonnoco Хорошо, теперь мне любопытно... что это было?   -  person Beska    schedule 28.09.2012
comment
Это ваш комментарий к этому ответу   -  person El Ronnoco    schedule 28.09.2012


Ответы (1)


Все, что возвращается этой веб-службой, будет назначено this.session. Использование ref теряется, так как this.session присваивается обратно возвращаемому значению.

Передавая параметр как ссылку веб-службе, вы получаете функциональность, которую ожидаете от вызова любого другого метода, т. е. ваши изменения в этом параметре отражаются обратно. Но IMO это не очень хорошая практика для кодирования веб-сервисов. Это сбивает с толку.

person Ε Г И І И О    schedule 22.05.2014