Compilerwarnung (Stufe 1) CS0197
Aktualisiert: November 2007
Fehlermeldung
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
Passing 'argument' as ref or out or taking its address may cause a runtime exception because it is a field of a marshal-by-reference class
Eine Klasse, die direkt oder indirekt von MarshalByRefObject abgeleitet ist, ist eine Klasse für das Marshallen nach Verweis. Eine solche Klasse kann nach Verweis über Prozess- und Computergrenzen hinweg marshallt werden. Damit können Instanzen dieser Klasse Proxys für Remote-Objekte sein. Ein Feld eines Proxyobjekts kann nicht als ref oder out übergeben werden. Das heißt, Felder einer solchen Klasse können nur als ref oder out übergeben werden, wenn die Instanz this ist, die jedoch 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);
}
}