Leer en inglés

Compartir a través de


Advertencia del compilador (nivel 1) CS0197

No se puede pasar 'argumento' como out o ref ni usar su dirección porque podría provocar una excepción en tiempo de ejecución ya que es un campo de una clase de serialización por referencia

Cualquier clase que se deriva, directa o indirectamente, de MarshalByRefObject es una clase de serialización por referencia. Una clase como esta se puede serializar por referencia sin tener en cuenta los límites de proceso o equipo. Por ello, las instancias de esta clase pueden ser proxy respecto de objetos remotos. No se puede pasar un campo de un objeto proxy como ref o out. Por lo tanto, no puede pasar campos de una clase así como ref o out, a menos que la instancia sea esta, que no puede ser un objeto proxy.

Ejemplo

El ejemplo siguiente genera la advertencia CS0197.

C#
// 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);  
   }  
}