也许这是一个琐碎的问题,但这让我很困扰。如果它是重复的话,不要大喊大叫 - 我试图搜索,但是有很多关于使用的问题,我很难找到答案。
我有这样的代码:
using (IsolatedStorageFile ISF = IsolatedStorageFile.GetUserStoreForApplication())
using (StreamWriter writeFile = new StreamWriter(new IsolatedStorageFileStream("example.txt", FileMode.Create, ISF)))
writeFile.WriteLine("Example");
我的问题是:当我IsolatedStorageFileStream
处置StreamWriter
时,在离开使用时会发生什么?它会被处置吗?
与此代码相比有什么不同:
using (IsolatedStorageFile ISF = IsolatedStorageFile.GetUserStoreForApplication())
using (IsolatedStorageFileStream stream = ISF.CreateFile("example.txt"))
using (StreamWriter writeFile = new StreamWriter(stream))
writeFile.WriteLine("Example");
提前致谢。
答案 0 :(得分:5)
您有一个constructor for StreamWriter
(仅限.NET Framework 4.5),它允许指定leaveOpen
布尔值,用于定义您的实例是否拥有基础流的所有权。
如果未指定(如您的示例或框架的先前版本),默认情况下为false
,因此关闭(或处置)实例将关闭基础流。
除非将leaveOpen参数设置为true,否则为StreamWriter 对象在提供的Stream对象上调用Dispose() 调用StreamWriter.Dispose。
因此,您提供的两段代码之间存在无差异。
答案 1 :(得分:0)
一旦离开使用块,就会调用Dispose。
using Statement (C# Reference)
using语句在对象中调用Dispose方法 正确的方式,(当你使用它如前所示)它也会导致 一旦调用Dispose,对象本身就会超出范围。内 使用块,该对象是只读的,不能修改或 重新分配。
using语句确保即使调用Dispose也会调用 在对象上调用方法时发生异常。
答案 2 :(得分:0)
即使流处理器被丢弃,您的流仍会保持打开状态。例如,您可以打开另一个流编写器并继续写入流。
答案 3 :(得分:-1)
始终使用{}!它使您的代码的意图更好。 您的代码如下:
using (IsolatedStorageFile ISF = IsolatedStorageFile.GetUserStoreForApplication())
{
using (StreamWriter writeFile = new StreamWriter(new IsolatedStorageFileStream("example.txt", FileMode.Create, ISF)))
{
writeFile.WriteLine("Example");
}
}
然后,您可以看到StreamWriter在ISF的上下文中执行。如果我正确理解ISF,则在Streamwriter关闭文件时不应关闭ISF。你可以在ISF Block中打开另一个文件。