Ответ «дублировать» — хотя слабое событие может быть лучшим решением здесь. Вопрос совсем в другом.
В этом ответе нам говорят (почти) никогда не писать деструктор от человека, который работал над компилятором C#. Нас также предупреждают, что на этом пути есть много подводных камней.
Нам также предлагается использовать его при удержании неуправляемых ресурсов.
И, наконец, лучше реализовать одноразовый вариант.
Но, похоже, есть простой случай (с которым я сейчас столкнулся), который заключается в том, чтобы отказаться от подписки на системные события (например, SystemEvents.PowerModeChanged ). Использовать disposable непрактично, поскольку вся причина использования деструктора состоит в том, чтобы не допустить, чтобы вызывающая сторона забыла вызвать Dispose, а использование блока using во многих случаях нецелесообразно.
Из SystemEvents.PowerModeChanged:
Поскольку это статическое событие, вы должны отключить обработчики событий при удалении приложения, иначе возникнут утечки памяти.< /p>
Подводя итог, у меня есть класс, который подписывается на системное событие, а затем использует эту информацию. В какой-то момент на класс может больше не ссылаться и он не будет собирать мусор, но он не сможет отказаться от подписки на системное событие. Действительно ли уместно в этом случае отписываться в деструкторе? (И если да, то каким должен быть мой контрольный список, чтобы избежать ошибок?)
Очевидно, что не следует полагаться на деструктор . Я имею в виду создание деструктора на случай, если в коде вызывающего объекта есть ошибка.
РЕДАКТИРОВАТЬ
Экземпляр класса будут иметь право на взыскание, по крайней мере, согласно этому ответу. И еще один ответ (от Скита) здесь: https://stackoverflow.com/a/21750930/939213
Подробнее здесь: https://stackoverflow.com/questions/787 ... -from-a-sy
Должен ли я реализовать деструктор C# (он же финализатор), чтобы отказаться от подписки на системное событие? [дубликат] ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение