我们是否需要在使用块中关闭C#BinaryWriter或BinaryReader?

时间:2009-07-03 13:46:47

标签: c# idisposable using

拥有此代码:

using (BinaryWriter writer = new BinaryWriter(File.Open(ProjectPath, FileMode.Create)))
{
   //save something here
}

我们需要关闭BinaryWriter吗?如果没有,为什么?

5 个答案:

答案 0 :(得分:18)

只要它全部包含在using块中,您就不需要明确调用Close

using块将确保处置对象,CloseDispose方法可在BinaryWriter上互换。 (Close方法只是在幕后调用Dispose。)

答案 1 :(得分:4)

使用您所拥有的代码,它将在退出使用块后关闭文件,因此您无需密切关闭explcitly。

不使用using语句的唯一原因是如果你想在完成BinaryWriter后仍然打开文件,在这种情况下你应该保留它的引用而不是将它传递给构造函数那样的。

答案 2 :(得分:4)

根据你的代码示例将它放在using语句中会调用Dispose,它会关闭底层流,所以没有。你可以通过Reflector看到这个:

protected virtual void Dispose(bool disposing)
{
    if (disposing)
    {
        this.OutStream.Close();
    }
}

答案 3 :(得分:0)

using块将自动关闭二进制写入器并将其置于GC状态。使用块是语法糖,用于自己进行异常处理和关闭流。

答案 4 :(得分:0)

通过将编写器包装在使用块中,关闭将在编写器处理时自动发生。所以在这种情况下,您不需要显式关闭编写器。