Číst v angličtině

Sdílet prostřednictvím


Upozornění kompilátoru (úroveň 1) CS0197

Předání argumentu jako odkaz nebo odebrání adresy může způsobit výjimku za běhu, protože se jedná o pole třídy marshal-by-reference.

Každá třída, která je odvozena přímo nebo nepřímo, MarshalByRefObject je zařazování podle referenční třídy. Takovou třídu lze zařaďovat pomocí odkazu přes hranice procesu a stroje. Instance této třídy by tedy mohly být proxy pro vzdálené objekty. Pole objektu proxy nelze předat jako odkaz nebo ven. Nelze tedy předat pole takové třídy jako ref nebo out, pokud je to instance, což nemůže být objekt proxy.

Příklad

Následující ukázka vygeneruje 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);  
   }  
}