Auf Englisch lesen

Freigeben über


Compilerwarnung (Stufe 1) CS0197

Das Übergeben von 'Argument' als Verweis oder Ausgabe oder das Übernehmen der Adresse kann zu einer Laufzeitausnahme führen, da es sich hierbei um ein Feld einer Marshal-by-reference-Klasse handelt.

Jede Klasse, die direkt oder indirekt von MarshalByRefObject abgeleitet wird, ist eine Marshal-by-reference-Klasse. Eine solche Klasse kann über Prozess- und Computergrenzen hinweg durch Verweis gemarshallt werden. Folglich können Instanzen dieser Klasse Proxys für Remoteobjekte sein. Sie können ein Feld eines Proxyobjekts nicht als ref oder out übergeben. Daher können Sie Felder einer solchen Klasse nur dann als ref oder out übergeben, wenn die Instanz this lautet und somit kein Proxyobjekt sein kann.

Beispiel

Im folgenden Beispiel wird CS0197 generiert.

// 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);  
   }  
}