Precisamos fechar a C# BinaryWriter ou BinaryReader em um usando o bloco?
-
21-08-2019 - |
Pergunta
Tendo este código:
using (BinaryWriter writer = new BinaryWriter(File.Open(ProjectPath, FileMode.Create)))
{
//save something here
}
Precisamos fechar a BinaryWriter?Se não, por quê?
Solução
Enquanto é tudo embrulhado em um using
bloco, então você não precisa chamar explicitamente Close
.
O using
bloco irá garantir que o objeto é descartado, e o Close
e Dispose
métodos são intercambiáveis em BinaryWriter
.(O Close
apenas chama o método Dispose
por trás dos bastidores.)
Outras dicas
Colocá -lo em uma instrução Usando conforme seu exemplo de código será chamado de disposição, que fecha o fluxo subjacente, então não. Você pode ver isso através do refletor:
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
this.OutStream.Close();
}
}
Com o código que você tem, ele fechará o arquivo assim que ele sair do bloco de uso, para que você não precise ligar para o Fechar Explcitly.
O único motivo para não usar a instrução Us usando seria se você deseja que o arquivo ainda esteja aberto depois de terminar o seu BinaryWriter; nesse caso, você deve manter uma referência dele em vez de passá -lo para o construtor como esse.
O bloco de uso fechará automaticamente o escritor binário e o colocará em um estado para ser gc'ed. O uso de blocos é açúcar sintático para fazer o manuseio de exceções e o fechamento do fluxo.
Ao encerrar o escritor em um bloco de uso, o fechamento acontecerá automaticamente quando o escritor estiver disposto. Portanto, neste caso, você não precisa fechar explicitamente o escritor.