Нужно ли закрывать C # BinaryWriter или BinaryReader в блоке using?
-
21-08-2019 - |
Вопрос
Имея этот код:
родовое словоНужно ли закрывать BinaryWriter?Если нет, то почему?
Решение
Пока все это заключено в блок using
, вам не нужно явно вызывать Close
.
Блок using
обеспечивает удаление объекта, а методы Close
и Dispose
взаимозаменяемы в BinaryWriter
.(Метод Close
просто вызывает скрытый вызов Dispose
.)
Другие советы
Помещение его в оператор using в соответствии с примером кода вызовет Dispose, который закрывает базовый поток, поэтому нет.Вы можете увидеть это через Reflector:
родовое словоС помощью кода, который у вас есть, он закроет файл после выхода из блока using, поэтому вам не нужно явно вызывать close.
Единственная причина не использовать оператор using - это если вы хотите, чтобы файл все еще был открыт после того, как вы закончили с вашим BinaryWriter, и в этом случае вам следует придерживаться ссылки на него вместо того, чтобы передавать его в конструкторвот так.
Блок using автоматически закроет двоичный модуль записи и переведет его в состояние для сборки мусора.Использование блоков - это синтаксический сахар для самостоятельной обработки исключений и закрытия потока.
Если модуль записи заключен в блок using, закрытие произойдет автоматически при удалении модуля записи.Так что в этом случае вам не нужно явно закрывать писатель.