В этом ответе нам сказано (почти) никогда не писать деструктор от человека, который работал над компилятором C#. Нас также предупреждают, что на этом пути есть много подводных камней.
Нам также предлагается использовать его при удержании неуправляемых ресурсов.
И, наконец, лучше реализовать одноразовый вариант.
Но, похоже, есть простой случай (с которым я сейчас столкнулся), который заключается в том, чтобы отказаться от подписки на системные события (например, SystemEvents.PowerModeChanged ). Использовать disposable непрактично, поскольку вся причина использования деструктора состоит в том, чтобы не допустить, чтобы вызывающая сторона забыла вызвать Dispose, а использование блока using во многих случаях нецелесообразно.
Из SystemEvents.PowerModeChanged:
Поскольку это статическое событие, вы должны отключить обработчики событий при удалении приложения, иначе возникнут утечки памяти.< /p>
Подводя итог, у меня есть класс, который подписывается на системное событие, а затем использует эту информацию. В какой-то момент на класс может больше не ссылаться и он не будет собирать мусор, но он не сможет отказаться от подписки на системное событие. Действительно ли уместно в этом случае отписываться в деструкторе? (И если да, то каким должен быть мой контрольный список, чтобы избежать ошибок?)
Очевидно, что не следует полагаться на деструктор . Я имею в виду создание деструктора на случай, если в коде вызывающего объекта есть ошибка.
Подробнее здесь: https://stackoverflow.com/questions/787 ... -from-a-sy
Должен ли я реализовать деструктор C# (он же финализатор), чтобы отказаться от подписки на системное событие? ⇐ C#
Место общения программистов C#
1720728988
Anonymous
В этом ответе нам сказано (почти) никогда не писать деструктор от человека, который работал над компилятором C#. Нас также предупреждают, что на этом пути есть много подводных камней.
Нам также предлагается использовать его при удержании неуправляемых ресурсов.
И, наконец, лучше реализовать одноразовый вариант.
Но, похоже, есть простой случай (с которым я сейчас столкнулся), который заключается в том, чтобы отказаться от подписки на системные события (например, SystemEvents.PowerModeChanged ). Использовать disposable непрактично, поскольку вся причина использования деструктора состоит в том, чтобы не допустить, чтобы вызывающая сторона забыла вызвать Dispose, а использование блока using во многих случаях нецелесообразно.
Из SystemEvents.PowerModeChanged:
Поскольку это статическое событие, вы должны отключить обработчики событий при удалении приложения, иначе возникнут утечки памяти.< /p>
Подводя итог, у меня есть класс, который подписывается на системное событие, а затем использует эту информацию. В какой-то момент на класс может больше не ссылаться и он не будет собирать мусор, но он не сможет отказаться от подписки на системное событие. Действительно ли уместно в этом случае отписываться в деструкторе? (И если да, то каким должен быть мой контрольный список, чтобы избежать ошибок?)
Очевидно, что не следует [b]полагаться[/b] на деструктор . Я имею в виду создание деструктора на случай, если в коде вызывающего объекта есть ошибка.
Подробнее здесь: [url]https://stackoverflow.com/questions/78737454/should-i-implement-a-c-sharp-destructor-aka-finalizer-to-unsubscribe-from-a-sy[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия