В этом ответе нам сказано (почти) никогда не писать деструктор от человека, который работал над компилятором C#. Нас также предупреждают, что на этом пути есть много подводных камней.
Нам также предлагается использовать его при удержании неуправляемых ресурсов.
И, наконец, лучше реализовать одноразовый вариант.
Но, похоже, есть простой случай (с которым я сейчас столкнулся), который заключается в том, чтобы отказаться от подписки на системные события (например, SystemEvents.PowerModeChanged ). Использовать disposable непрактично, поскольку вся причина использования деструктора состоит в том, чтобы не допустить, чтобы вызывающая сторона забыла вызвать Dispose, а использование блока using во многих случаях нецелесообразно.
Из SystemEvents.PowerModeChanged:
Поскольку это статическое событие, вы должны отключить обработчики событий при удалении приложения, иначе возникнут утечки памяти.< /p>
Подводя итог, у меня есть класс, который подписывается на системное событие, а затем использует эту информацию. В какой-то момент на класс может больше не ссылаться и он не будет собирать мусор, но он не сможет отказаться от подписки на системное событие. Действительно ли уместно в этом случае отписываться в деструкторе? (И если да, то каким должен быть мой контрольный список, чтобы избежать ошибок?)
Подробнее здесь: https://stackoverflow.com/questions/787 ... -from-a-sy
Должен ли я реализовать деструктор C# (он же финализатор), чтобы отказаться от подписки на системное событие? ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение