Avviso del compilatore (livello 1) CS0197

Aggiornamento: novembre 2007

Messaggio di errore

Passare 'argomento' come parametro ref o out oppure accettarne l'indirizzo potrebbe provocare un'eccezione in fase di esecuzione perché è un campo di una classe con marshaling per riferimento.
Passing 'argument' as ref or out or taking its address may cause a runtime exception because it is a field of a marshal-by-reference class

Tutte le classi che derivano direttamente o indirettamente da MarshalByRefObject sono classi con marshalling per riferimento. Tali classi possono essere sottoposte a marshalling per riferimento oltre i limiti del processo e del computer. Le istanze di queste classi possono pertanto essere proxy per gli oggetti remoti. Non è possibile passare un campo di un oggetto proxy come ref o out. I campi di tali classi non possono dunque essere passati come argomenti ref o out, a meno che l'istanza non sia this, ovvero un'istanza che non può essere un oggetto proxy.

Esempio

Il seguente codice di esempio genera l'errore 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);
   }
}