Предупреждение компилятора (уровень 1) CS0197
Передача аргумента "аргумент" в качестве параметра с ключевым словом ref или out или получение его адреса может вызвать исключение времени исполнения, поскольку она является полем класса, который упаковывается и маршалируется по ссылке.
Любой класс, производный прямо или косвенно от MarshalByRefObject , является классом, маршалируемым по ссылке. Такой класс можно маршалировать по ссылке между процессами и границами машины. Таким образом, экземпляры этого класса могут быть прокси-элементами удаленного взаимодействия. Невозможно передать поле прокси-объекта в виде ссылки или выхода. Таким образом, нельзя передавать поля такого класса, как 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);
}
}
Отзыв о .NET
.NET — это проект с открытым исходным кодом. Выберите ссылку, чтобы оставить отзыв: