Ler em inglês

Compartilhar via


Aviso do compilador (nível 1) CS0197

Passar 'argument' como ref ou out, ou obter seu endereço pode gerar uma exceção de runtime, pois trata-se de um campo de uma classe marshaling por referência

Qualquer classe que derive, direta ou indiretamente, de MarshalByRefObject é uma classe marshaling por referência. Essa classe pode ser objeto de marshaling por referência entre os limites do processo e da máquina. Assim, instâncias dessa classe podem ser proxies para objetos remotos. Você não pode passar um campo de objeto proxy como ref ou out. Portanto, não pode passar campos de uma classe como ref ou out, a menos que a instância seja this, que não pode ser um objeto proxy.

Exemplo

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