Я отлаживаю некоторый класс C # (скажем, Foo), в котором реализован шаблон Dispose-Finalize, то есть его Finalizer вызывает Dispose () в случае, если Dispose еще не был вызван.
Внутри Dispose () есть код регистрации, который обращается к некоторому члену Foo (скажем, Bar).Bar также является экземпляром некоторого ссылочного типа, доступен только для чтения (создается в конструкторе Foo) и не отображается нигде за пределами Foo.Таким образом, во время сбора мусора Foo, вероятно, также будет собираться Bar.Теория говорит, что такие поля-члены не должны быть доступны из потока Finalize.
Но код регистрации не знал теории и пытался зарегистрировать некоторые свойства Bar.И процесс завершился с NullReferenceException в потоке Финализатора.
Я понимаю, что плохие вещи могут случиться, когда вы игнорируете теорию, но я не ожидал, что NRE: сборщик мусора отправляет ссылки на собранные объекты на нуль?Или я что-то упускаю?