Я нашел много статей о статике (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
Как это работает точно?

