Partager via


Avertissement du compilateur (niveau 1) CS0197

Mise à jour : novembre 2007

Message d'erreur

Le passage de 'argument' comme ref ou out ou la prise de son adresse peut provoquer une exception runtime, car il s'agit d'un champ d'une classe marshalée-par-référence
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

Toute classe qui dérive (directement ou indirectement) de MarshalByRefObject est une classe marshalée-par-référence. Cette classe peut être marshalée par référence sur plusieurs limites de processus et d'ordinateur. C'est pourquoi, les instances de cette classe peuvent être des proxies d'objets distants. Vous ne pouvez pas passer un champ d'un objet proxy comme ref ou out. Par conséquent, vous ne pouvez pas passer des champs de ce type de classe comme ref ou out, sauf si l'instance est this, qui ne peut pas être un objet proxy.

Exemple

L'exemple suivant génère l'erreur 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);
   }
}