Przeczytaj w języku angielskim

Udostępnij za pośrednictwem


Ostrzeżenie kompilatora (poziom 1) CS0197

Przekazywanie argumentu jako odwołania lub jego adresu może spowodować wyjątek środowiska uruchomieniowego, ponieważ jest to pole klasy marshal-by-reference

Każda klasa, która pochodzi bezpośrednio lub pośrednio, MarshalByRefObject jest klasą marshal-by-reference. Taką klasę można rozmieścić, odwołując się do granic procesów i maszyn. W związku z tym wystąpienia tej klasy mogą być serwerami proxy do obiektów zdalnych. Nie można przekazać pola obiektu proxy jako odwołania lub wyjścia. W związku z tym nie można przekazać pól takiej klasy jako ref lub out, chyba że wystąpienie jest takie, które nie może być obiektem serwera proxy.

Przykład

Poniższy przykład generuje plik 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);  
   }  
}