Я нашел много статей о статике (MSDN, MSDN 2, Qaru и многое другое), но я до сих пор не могу понять, почему этот код возвращает -1
:
class Program
{
static int value = 0;
static int foo()
{
value = value - 7;
return 1;
}
static void Main(string[] args)
{
value -= foo();
Console.WriteLine(value);
Console.ReadKey();
}
}
Вот что показывает отладчик после запуска foo()
, но до того, как результат вычитается из value
:
Но на один шаг позже value
становится -1
:
Я ожидаю -8
из-за статического поля, которое хранится в памяти один раз.
Когда я изменил его на
var x = foo();
value -= x;
это показывает -8
Как это работает точно?