Тестирование финализаторов и IDisposable

Метод Java называют" Анонимный внутренний класс ", и в C# нет никакого эквивалента.

5
задан Dmytrii Nagirniak 21 October 2009 в 01:48
поделиться

2 ответа

«Я полагаю, что это переменная o, которая не позволяет сборщику мусора собирать ее». Верный. Наличие ссылки в стеке означает, что объект доступен и, следовательно, не имеет права на сбор (и финализацию).

Поскольку объект не будет завершен, пока на него не будет ссылок, поведение завершения тестирования, вероятно, будет сложно. (Вам нужна ссылка на объект, чтобы делать утверждения о нем!) Один из способов - сделать это косвенно: заставить объект отправить какое-то сообщение во время завершения. Но это искажает код финализации исключительно в тестовых целях. Вы также можете содержать слабую ссылку на объект, что сделает его подходящим для финализации и воскресит себя в финализаторе - но опять же вы не хотите, чтобы он воскресал в производственном коде.

3
ответ дан 15 December 2019 в 06:29
поделиться

Зачем собирать объект, если на него есть локальная ссылка?

0
ответ дан 15 December 2019 в 06:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: