有这个代码:
using (BinaryWriter writer = new BinaryWriter(File.Open(ProjectPath, FileMode.Create)))
{
//save something here
}
我们需要关闭 BinaryWriter 吗?如果不是,为什么?
有这个代码:
using (BinaryWriter writer = new BinaryWriter(File.Open(ProjectPath, FileMode.Create)))
{
//save something here
}
我们需要关闭 BinaryWriter 吗?如果不是,为什么?
只要它全部包含在一个using
块中,那么您就不需要显式调用Close
.
该using
块将确保对象被释放,并且Close
和Dispose
方法在BinaryWriter
. (该方法只是在幕后Close
调用。)Dispose
使用您那里的代码,一旦退出 using 块,它将关闭文件,因此您无需显式调用 close 。
不使用 using 语句的唯一原因是,如果您希望在完成 BinaryWriter 后仍然打开文件,在这种情况下,您应该保留它的引用,而不是像那样将它传递给构造函数。
根据您的代码示例将其放入 using 语句将调用 Dispose,它会关闭底层流,所以不会。您可以通过 Reflector 看到这一点:
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
this.OutStream.Close();
}
}
using 块将自动关闭二进制写入器并将其置于待 GC 状态。使用块是自己进行异常处理和关闭流的语法糖。
通过将编写器包装在 using 块中,关闭将在编写器被释放时自动发生。所以在这种情况下,您不需要显式关闭编写器。