ключевое слово ref и домены приложений

Когда я начал использовать C #, я не был уверен, как именно обрабатываются ссылки (передаются ли они по значению и т. д.). Я ошибочно полагал, что ключевое слово 'ref' было необходимо при передаче объектов, которые будут изменены вызываемым методом.

Затем, прочитав темы вроде это , я понял, 'ref' был необходим только тогда, когда вам нужно изменить саму ссылку /указатель.

Но сегодня я столкнулся с проблемой при передаче параметра через удаленный вызов, когда ref фактически был необходим для изменения содержимого объекта. Когда прошло без ссылки, объект вернулся без изменений. Мне сказали добавить ключевое слово ref, но я некоторое время утверждал, что это необходимо только при изменении самого указателя, а не содержимого, на которое указывает указатель.

Я искал в сети и смог найти только одна страница , в которой это кратко обсуждается. Является ли это известной проблемой, и может ли кто-нибудь указать на нее какую-либо документацию? Мне кажется, что теперь мне придется использовать ref для любого параметра, который изменяется с помощью удаленного вызова.

7 голосов | спросил LegendLength 8 Mayam09 2009, 07:31:28

2 ответа


0

Добавление «ref» может или не может помочь. Все зависит от разумности конкретной маршаллерской реализации. Если вы вызываете, например, веб-сервис, никакие «ref» не помогут вам - параметры функции просто не будут отправлены обратно по проводам. Единственное, что возвращается из сервиса - это возвращаемое значение функции. Имея дело с удаленным взаимодействием, вы должны понимать (по крайней мере, до некоторой степени), как все работает на самом деле - тот факт, что параметры должны быть сериализованы и отправлены вызываемому абоненту по какому-то «проводу», десериализован на другом конце, работает выполняется сервером, а результаты сериализуются и отправляются обратно вам. Включение этих результатов в изменения параметров, которые вы в первую очередь передали, зависит в большей степени от конкретной реализации удаленного взаимодействия, а не от «ссылок», которые вы добавляете для украшения своих параметров ...

ответил user8032 8 Mayam09 2009, 07:44:50
0

Интересно, почему вы сказали «ссылка /указатель»? Есть большая разница между этими терминами. Видите ли, указатель - это просто адрес, скажем, int.

С другой стороны, ссылка - это не что иное, как псевдоним чего-либо. С точки зрения C ++:

int x;
int& y = x;

С этого момента, что бы ни случилось с x, случится с y и наоборот, они связаны "навсегда".

Опять же, в C ++, передача по ссылке:

void foo(int& y);
int main(){
    int x = 0;
    foo(x);
}

Это означает, что y - это просто другое имя (псевдоним) для x в области видимости foo. Это то, что ref означает в C #.

ответил Anzurio 8 Mayam09 2009, 07:43:59

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132