Должен ли я вызвать Close () или Dispose () для потоковых объектов?

Классы, такие как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() метод:

Как: скачать файлы с FTP

Это хорошо?

Ответы на вопрос(4)

Ваш ответ на вопрос