有了这个代码:我们是否需要关闭一个C#的BinaryWriter或BinaryReader在在使用块?
using (BinaryWriter writer = new BinaryWriter(File.Open(ProjectPath, FileMode.Create)))
{
//save something here
}
我们是否需要关闭的BinaryWriter?如果不是,为什么?
有了这个代码:我们是否需要关闭一个C#的BinaryWriter或BinaryReader在在使用块?
using (BinaryWriter writer = new BinaryWriter(File.Open(ProjectPath, FileMode.Create)))
{
//save something here
}
我们是否需要关闭的BinaryWriter?如果不是,为什么?
只要它全部封装在using
块中,那么您不需要明确地调用Close
。
的using
块将确保对象被销毁,并且Close
和Dispose
方法是可互换的上BinaryWriter
。 (该Close
方法只是调用Dispose
幕后。)
随着你那里它将关闭该文件一旦退出使用的块,所以你不需要explcitly调用close的代码。
不使用using语句的唯一原因是,如果您希望文件在您完成BinaryWriter后仍然处于打开状态,则在这种情况下,您应该保留该文件的引用而不是将其传递到像这样的构造函数。
把它在一个using语句,按您的代码示例将调用Dispose,其中关闭底层流,所以没有。你可以通过反射器看到这个:
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
this.OutStream.Close();
}
}
使用块将自动关闭二进制写入器并将其置于被GC化的状态。使用块是用于执行异常处理和自己关闭流的语法糖。
通过包装在一个使用块写入器时,写入器被布置在靠近将自动发生。所以在这种情况下,你不需要明确地关闭作者。
尽管事实上,这是一个不同的类型,这是http://stackoverflow.com/questions/1070667/is-is-necessary-to-dispose-dbcommand-after-use/的副本。我会投票结束,但已经达到了我今天的极限。我建议我们不需要为每个实现它的类都配置一个“实现IDisposable的类”问题。请考虑投票结束您最喜爱的IDisposable问题的重复。 – 2009-07-03 14:42:42