Классы, такие как Stream
, StreamReader
, StreamWriter
и т. Д., Реализуют интерфейс IDisposable
. Это означает, что мы можем вызвать метод Dispose ()
для объектов этих классов.Они также определили общедоступный
метод под названием 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();
}
}
Как видите, я написал с использованием конструкций ()
, которые автоматически вызывают метод Dispose ()
для каждого объекта. Но я также вызываю методы Close ()
. Это правильно?
Пожалуйста, предложите мне лучшие практики использования потоковых объектов. : -)
Пример MSDN не использует using ()
конструкции и вызывает метод Close ()
:
Is это хорошо?