Ostrzeżenie kompilatora (poziom 1) CS0197
Przekazywanie argumentu jako odwołania lub jego adresu może spowodować wyjątek środowiska uruchomieniowego, ponieważ jest to pole klasy marshal-by-reference
Każda klasa, która pochodzi bezpośrednio lub pośrednio, MarshalByRefObject jest klasą marshal-by-reference. Taką klasę można rozmieścić, odwołując się do granic procesów i maszyn. W związku z tym wystąpienia tej klasy mogą być serwerami proxy do obiektów zdalnych. Nie można przekazać pola obiektu proxy jako odwołania lub wyjścia. W związku z tym nie można przekazać pól takiej klasy jako ref
lub out
, chyba że wystąpienie jest takie, które nie może być obiektem serwera proxy.
Poniższy przykład generuje plik 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);
}
}
Opinia o produkcie .NET
.NET to projekt typu open source. Wybierz link, aby przekazać opinię: