Почему я всегда вижу начальное значение статической переменной?
У меня есть какое-то странное поведение в коде, которое, казалось бы, настолько просто, что у меня закончились места для поиска ошибки.
В приведенном ниже классе функция
RunStepNormally()
призванный. Пока все хорошо.Затем я звоню
SomeClass.InitiateTimeSeek()
, что подтверждается попаданием точки останова. Пока все идет хорошо.Проблема возникает в следующем цикле. В
RunStep()
, значение _runningRealTime
является истинным, даже если он был явно установлен в false в InitiateTimeSeek()
.Если я изменю значение инициализации
_runningRealTime
ложному, то оно остается при ложном. Другими словами, в RunStep()
Я всегда вижу какую-то ценность _runningRealTime
инициализируется и никогда не видит ничего другого.public abstract class SomeClass<T> { public void RunStep() { if( _runningRealTime ) RunStepNormally(); else RunStepTimeSkipActive(); } public static void InitiateTimeSeek() { _runningRealTime = false; } public static void CancelTimeSeek() { _runningRealTime = true; } public void RunStepNormally() {} public void RunStepTimeSkipActive() {} private static bool _runningRealTime = true; }
Поскольку этот код настолько прост, у меня возникает ощущение, что я упускаю что-то действительно глупое. Есть ли у кого - нибудь предположения, что может произойти?
Что я уже пробовал:
Моей первой мыслью было, что новые экземпляры класса создаются неоднократно, но точка останова в конструкторе (не показана) попадает только один раз, как я и ожидал.