更新:2007 年 11 月

错误消息

由于“argument”是引用封送类的字段,将它作为 ref 或 out 参数传递或获取它的地址可能导致运行时异常

MarshalByRefObject 派生(直接或间接)的任何类均是引用封送类。这样的类可以通过引用跨越进程和计算机边界进行封送。因此,该类的实例可以是远程对象的代理。不能将代理对象的字段作为 refout 传递。因此,不能将这种类的字段作为 refout 传递,除非实例是 this(它不能是代理对象)。

示例

下面的示例生成 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);
   }
}