10

有这个代码:

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

我们需要关闭 BinaryWriter 吗?如果不是,为什么?

4

5 回答 5

19

只要它全部包含在一个using块中,那么您就不需要显式调用Close.

using块将确保对象被释放,并且CloseDispose方法在BinaryWriter. (该方法只是在幕后Close调用。)Dispose

于 2009-07-03T13:50:05.793 回答
4

使用您那里的代码,一旦退出 using 块,它将关闭文件,因此您无需显式调用 close 。

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

于 2009-07-03T13:48:12.457 回答
4

根据您的代码示例将其放入 using 语句将调用 Dispose,它会关闭底层流,所以不会。您可以通过 Reflector 看到这一点:

protected virtual void Dispose(bool disposing)
{
    if (disposing)
    {
        this.OutStream.Close();
    }
}
于 2009-07-03T13:50:12.080 回答
0

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

于 2009-07-03T13:51:50.453 回答
0

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

于 2009-07-03T13:51:57.363 回答