2009-07-03 78 views
9

有了这个代码:我们是否需要关闭一个C#的BinaryWriter或BinaryReader在在使用块?

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

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

+0

尽管事实上,这是一个不同的类型,这是http://stackoverflow.com/questions/1070667/is-is-necessary-to-dispose-dbcommand-after-use/的副本。我会投票结束,但已经达到了我今天的极限。我建议我们不需要为每个实现它的类都配置一个“实现IDisposable的类”问题。请考虑投票结束您最喜爱的IDisposable问题的重复。 – 2009-07-03 14:42:42

回答

18

只要它全部封装在using块中,那么您不需要明确地调用Close

using块将确保对象被销毁,并且CloseDispose方法是可互换的上BinaryWriter。 (该Close方法只是调用Dispose幕后。)

4

随着你那里它将关闭该文件一旦退出使用的块,所以你不需要explcitly调用close的代码。

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

4

把它在一个using语句,按您的代码示例将调用Dispose,其中关闭底层流,所以没有。你可以通过反射器看到这个:

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

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

0

通过包装在一个使用块写入器时,写入器被布置在靠近将自动发生。所以在这种情况下,你不需要明确地关闭作者。

相关问题