Такие классы, как Stream
, StreamReader
и StreamWriter
т. Д. Реализует IDisposable
интерфейс. Это означает, что мы можем вызывать Dispose()
метод для объектов этих классов. Они также определили public
метод с именем Close()
. Теперь это смущает меня, что я должен назвать, как только я закончу с объектами? Что если я позвоню обоим?
Мой текущий код такой:
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 (MemoryStream ms1 = new MemoryStream(), ms2 = new MemoryStream()) { }
. Я имею в виду, как это, где вы можете переопределить тип:using (MemoryStream ms = new MemoryStream()) using (FileStream fs = File.OpenRead("c:\\file.txt")) { }