«статическое» значение сбрасывается после вызова функции [дубликат]

На этот вопрос уже есть ответ:

Я нашел много статей о статике ( MSDN , MSDN 2 , Переполнение стека и многое другое), но я до сих пор не могу понять, почему этот код возвращает -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:

foo=1, value=-7

Но на один шаг позже value будет -1:

value = -1

Я ожидаю -8 из-за статического поля, которое сохраняется в памяти один раз.

Когда я изменил его на

var x = foo();
value -= x;

, он показывает -8

Как именно это работает?

88
задан J. Antonio Perez 25 July 2019 в 22:08
поделиться