我们是否需要在使用块中关闭C#二进制作者或二进制阅读器?
-
21-08-2019 - |
题
拥有此代码:
using (BinaryWriter writer = new BinaryWriter(File.Open(ProjectPath, FileMode.Create)))
{
//save something here
}
我们需要关闭二进制作者吗?如果没有,为什么?
解决方案
只要全部包裹在 using
块然后您无需明确打电话 Close
.
这 using
块将确保对象被处置,并确保 Close
和 Dispose
方法可以互换 BinaryWriter
. 。 (这 Close
方法只是调用 Dispose
幕后。)
其他提示
按照您的代码示例将其放入使用语句中,将调用Dispose,即关闭基础流,因此没有。您可以通过反射器看到这一点:
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
this.OutStream.Close();
}
}
使用代码,您将在文件退出使用块后关闭该文件,因此您无需调用Close Complecit。
不使用使用语句的唯一原因是,如果您希望文件在与二进制作者完成后仍然打开,在这种情况下,您应该坚持使用它的引用,而不是将其传递到构造函数中。
使用块将自动关闭二进制作者,并将其放在要gced的状态下。使用块是句法糖,以便自行处理和关闭流。
通过将作者包裹在使用块中,当作者处置作者时,将自动发生关闭。因此,在这种情况下,您无需明确关闭作者。
不隶属于 StackOverflow