Мне нужен совет по реализации метода Dispose.
В нашем приложении пользователь разрабатывает собственный пользовательский интерфейс. У меня есть окно предварительного просмотра, которое показывает, как будет выглядеть пользовательский интерфейс. Весь объект, нарисованный в этом пользовательском интерфейсе, в конечном итоге вытекает из общего базового класса ScreenObject. Мой менеджер предварительного просмотра содержит ссылку на один объект для ScreenGrid, который является объектом сетки для всей области предварительного просмотра.
Вопрос № 1
Некоторые из моих производных классов экрана занимают неуправляемые ресурсы, такие как соединение с базой данных, растровое изображение и элемент управления WebBrowser. Эти классы должны распоряжаться этими объектами. Я создал виртуальный метод Dispose в базовом классе базового ScreenObject, а затем реализовал переопределяющий метод Dispose в каждом из производных классов, которые удерживаются на неуправляемых ресурсах. Однако прямо сейчас я создал метод Dispose, я не реализую IDisposable. Должен ли я реализовать IDisposable? Если да, то как его реализовать?
- Только на производных классах, у которых есть неуправляемые ресурсы
- Базовый класс и производные классы, у которых есть неуправляемые ресурсы OR
- Базовый класс и все производные классы, включая те, у которых нет неуправляемых ресурсов
Неправильно ли использовать виртуальный метод Dispose в базовом классе, который не имеет неуправляемых ресурсов, чтобы вы могли воспользоваться полиморфизмом?
Вопрос № 2
При чтении об методе Dispose и интерфейсе IDispoable Microsoft заявляет, что объект-утилита должен вызывать метод Dispose для своего родителя. Родитель вызовет его для своего родителя и так далее. Для меня это кажется обратным. Я могу захотеть избавиться от ребенка, но сохранил его родителя.
Я думаю, что это должно быть наоборот, объект, находящийся в распоряжении, должен распоряжаться своими детьми. Затем дети должны распоряжаться своими детьми и т.д.
Я здесь не так, или я чего-то не хватает?