Прочитать на английском

Поделиться через


Предупреждение компилятора (уровень 1) CS0197

Передача аргумента "аргумент" в качестве параметра с ключевым словом ref или out или получение его адреса может вызвать исключение времени исполнения, поскольку она является полем класса, который упаковывается и маршалируется по ссылке.

Любой класс, производный прямо или косвенно от MarshalByRefObject , является классом, маршалируемым по ссылке. Такой класс можно маршалировать по ссылке между процессами и границами машины. Таким образом, экземпляры этого класса могут быть прокси-элементами удаленного взаимодействия. Невозможно передать поле прокси-объекта в виде ссылки или выхода. Таким образом, нельзя передавать поля такого класса, как ref или out, если экземпляр не является этим, который не может быть прокси-объектом.

Пример

Следующий пример приводит к возникновению ошибки CS0197.

// CS0197.cs  
// compile with: /W:1  
class X : System.MarshalByRefObject  
{  
   public int i;  
}  
  
class M  
{  
   public int i;  
   static void AddSeventeen(ref int i)  
   {  
      i += 17;  
   }  
  
   static void Main()  
   {  
      X x = new X();  
      x.i = 12;  
      AddSeventeen(ref x.i);   // CS0197  
  
      // OK  
      M m = new M();  
      m.i = 12;  
      AddSeventeen(ref m.i);  
   }  
}