英語で読む

次の方法で共有


コンパイラの警告 (レベル 1) CS0197

参照マーシャリング クラスのフィールドであるため、'argument' を ref または out として渡す、またはそのアドレスを取得すると、ランタイム例外が発生する可能性があります

MarshalByRefObject から直接的または間接的に派生したクラスは、参照渡しのマーシャリング クラスです。 このようなクラスは、プロセスやコンピューターの境界を越えて、参照によってマーシャリングできます。 したがって、このクラスのインスタンスは、リモート オブジェクトに対するプロキシである可能性があります。 プロキシ オブジェクトのフィールドを ref または out として渡すことはできません。そのため、インスタンスがプロキシ オブジェクトにはできない this でない限り、このようなクラスのフィールドを ref または out として渡すことはできません。

次の例では 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);  
   }  
}