У меня есть объект, который содержит поток файлов. Файловый поток должен быть открыт для времени жизни объекта. Я хочу, чтобы поток файлов закрывался, когда у объекта больше нет ссылок, но никогда не до этого. Если Dispose() вызывается на объект, файл будет удален, но объект все еще может иметь ссылки. Вызов других методов после этой точки не будет безопасным, потому что файл будет удален, поэтому мне нужно будет выполнить проверку в начале каждого метода, чтобы убедиться, что файл по-прежнему действителен (трата времени выполнения).Выполнение IDispose :: Dispose() private
Может показаться, что решение Dispose() будет разрешать эту проблему, но опять же, я понимаю, что деструктор не может быть вызван немедленно, когда объект не имеет больше ссылок, поэтому я ДОЛЖЕН выставить Dispose () метод для вызывающего сделать свою собственную очистку. Разве это не разрушает цель «умного» управления памятью, и существует ли какой-либо способ этого?
Значит, вы не доверяете пользователям объекта только Dispose, когда им больше не нужен объект? Почему бы не просто повторно открыть файл, если 'Dispose' был вызван ранее? –
Вам не нужно делать это вручную. AOP может ввести вызов: https://github.com/Fody/Janitor – Mitch
Это будет проверка, чтобы проверить, был ли файл ранее установлен. Было бы лучше, если бы объект мог предположить, что файл всегда открыт. Нет ненужных условностей. – Lemming