Должен ли я реализовать деструктор C# (он же финализатор), чтобы отказаться от подписки на системное событие? [дубликат]C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Должен ли я реализовать деструктор C# (он же финализатор), чтобы отказаться от подписки на системное событие? [дубликат]

Сообщение Anonymous »

Ответ «дублировать» — хотя слабое событие может быть лучшим решением здесь. Вопрос совсем в другом.
В этом ответе нам говорят (почти) никогда не писать деструктор от человека, который работал над компилятором C#. Нас также предупреждают, что на этом пути есть много подводных камней.
Нам также предлагается использовать его при удержании неуправляемых ресурсов.
И, наконец, лучше реализовать одноразовый вариант.
Но, похоже, есть простой случай (с которым я сейчас столкнулся), который заключается в том, чтобы отказаться от подписки на системные события (например, SystemEvents.PowerModeChanged ). Использовать disposable непрактично, поскольку вся причина использования деструктора состоит в том, чтобы не допустить, чтобы вызывающая сторона забыла вызвать Dispose, а использование блока using во многих случаях нецелесообразно.
Из SystemEvents.PowerModeChanged:

Поскольку это статическое событие, вы должны отключить обработчики событий при удалении приложения, иначе возникнут утечки памяти.< /p>

Подводя итог, у меня есть класс, который подписывается на системное событие, а затем использует эту информацию. В какой-то момент на класс может больше не ссылаться и он не будет собирать мусор, но он не сможет отказаться от подписки на системное событие. Действительно ли уместно в этом случае отписываться в деструкторе? (И если да, то каким должен быть мой контрольный список, чтобы избежать ошибок?)
Очевидно, что не следует полагаться на деструктор . Я имею в виду создание деструктора на случай, если в коде вызывающего объекта есть ошибка.
РЕДАКТИРОВАТЬ
Экземпляр класса будут иметь право на взыскание, по крайней мере, согласно этому ответу. И еще один ответ (от Скита) здесь: https://stackoverflow.com/a/21750930/939213

Подробнее здесь: https://stackoverflow.com/questions/787 ... -from-a-sy
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»