Ler em inglês

Partilhar via


Aviso do compilador (nível 1) CS0197

Passar 'argument' como ref ou out ou tomar seu endereço pode causar uma exceção de tempo de execução porque é um campo de uma classe marechal por referência

Qualquer classe que derive, direta ou indiretamente, de é uma classe marechal MarshalByRefObject por referência. Essa classe pode ser agrupada por referência através dos limites do processo e da máquina. Assim, instâncias dessa classe poderiam ser proxies para objetos remotos. Não é possível passar um campo de um objeto proxy como ref ou out. Portanto, você não pode passar campos de tal classe como ref ou out, a menos que a instância seja esta, que não pode ser um objeto proxy.

Exemplo

O exemplo a seguir gera 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);  
   }  
}