2013-02-18 13 views
1

У меня возникают странные проблемы с WCF и передаются параметры как ref.Параметры WCF и ref

Скажем, у меня есть класс:

Class MyClass 
{ 
    public string str; 
} 

и блок кода:

List<MyClass> c = new List<MyClass>(); 
c.Add(new MyClass()); 
MyClass c2 = c[0]; 

Если я затем вызвать метод WCF, который должен обновить НТР-свойство этого класса:

WCFService.UpdateStr(ref c2); 

С [0] и c2 разные - они не должны содержать одну и ту же строку в str-свойстве !? Что-то не так в WCF по параметрам функции ref?

+0

У вас есть '[DataMember]' 'атрибут MyClass.str'? –

ответ

5

Нет, они не должны. Параметр, передаваемый по ссылке, означает, что сам объект может быть изменен, а в случае вызовов WCF - это. Когда возвращается вызов UpdateStr, c2 ссылается на другой экземпляр объекта.

На изображении ниже показано, что происходит с этим сценарием.

enter image description here

+0

Спасибо за очень показательную картину! Это должно быть обязательно учтено при разработке приложений WCF! – Jaska

+0

Это не ограничивается WCF. Любой метод, параметр которого помечен как 'ref', может изменить ссылку на объект (я просто знаю, что WCF всегда делает это). Это необходимо учитывать при разработке любого кода, который вызывает методы с параметрами 'ref'. – carlosfigueira

Смежные вопросы