编译器警告(等级 1)CS0197
由于“argument”是引用封送类的字段,因此,将它作为 ref 或 out 参数传递或获取它的地址可能导致运行时异常
从 MarshalByRefObject 直接或间接派生的任何类都是引用封送类。 这样的类可以跨进程和计算机边界引用封送。 因此,此类的实例可以是远程对象的代理。 不能将代理对象的字段作为 ref 或 out传递。因此,不能传递 ref
或 out
这类字段,除非实例是 this,它不能是代理对象。
下面的示例生成 CS0197。
C#
// 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);
}
}