IDisposable Винформ
-
19-08-2019 - |
Вопрос
Какова наилучшая практика для реализации IDisposable в Winform?
- У меня есть диалоговое окно, которое расширяет систему.Windows.Формы.Формировать
- Созданный designer.cs уже содержит реализацию метода virtual Dispose(bool)
- В моей форме есть поле, добавленное вручную, которое реализует IDisposable
В идеале я мог бы подключиться к переопределению Dispos (bool) в сгенерированном коде, чтобы удалить добавленный вручную IDisposable объект.Есть какие-нибудь рекомендации о том, как это сделать правильно?
Спасибо.
Скотт
Решение
Вы можете переместить эту реализацию Dispose из .designer.cs в свой .cs.
Другие советы
Но тогда ваше поле должно быть Компонентом (реализовать интерфейс IComponent или что-то подобное).Не было бы это немного чересчур ?
Может быть, вы можете прикрепить обработчик событий к удаляющему событию и удалить свои поля в этом обработчике событий ?
(Или просто добавьте их в метод Dispose - я не думаю, что это будет проблемой, поскольку afaik, код в методе Dispose не восстанавливается ...В идеале реализация метода Dispose не должна была находиться в классе *.designer.cs ...).
Я отменяю регистрацию любых событий в методе Dispose, найденном в designer.cs формы
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
_frmFind.RaiseFindEvent -= _frmFind_RaiseFindEvent;
base.Dispose(disposing);
}