像Stream
、StreamReader
、StreamWriter
等类都实现了IDisposable
接口。这意味着我们可以在这些类的对象上调用Dispose()
方法。它们还定义了一个名为Close()
的public
方法。现在这让我感到困惑,一旦我完成对象使用后应该调用哪个方法?如果我两个方法都调用会怎样?
我的当前代码是这样的:
using (Stream responseStream = response.GetResponseStream())
{
using (StreamReader reader = new StreamReader(responseStream))
{
using (StreamWriter writer = new StreamWriter(filename))
{
int chunkSize = 1024;
while (!reader.EndOfStream)
{
char[] buffer = new char[chunkSize];
int count = reader.Read(buffer, 0, chunkSize);
if (count != 0)
{
writer.Write(buffer, 0, count);
}
}
writer.Close();
}
reader.Close();
}
}
你可以看到,我已经使用了using()
结构,它会自动调用每个对象的Dispose()
方法。但是我也调用了Close()
方法,这样做对吗?
请给我一些建议,关于使用流对象的最佳实践。 :-)
MSDN示例没有使用using()
结构,并且调用了Close()
方法:
这样做好吗?
using
语句。即使在同一条语句中初始化多个资源,using
也只允许一个类型。如果您使用多个语句或多个类型,则必须嵌套using
语句;这里,对象是不同类型的,必须在单独的using
语句中。 - Suncat2000using (MemoryStream ms1 = new MemoryStream(), ms2 = new MemoryStream()) { }
。我是指像这样重新定义类型的语法:using (MemoryStream ms = new MemoryStream()) using (FileStream fs = File.OpenRead("c:\\file.txt")) { }
。 - Timothy Gonzalez