Классы, такие как 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()
:
Это хорошо?