Debo llamar a Close () o Dispose () para los objetos de flujo?

Clases comoStream, StreamReader, StreamWriter etc implementaIDisposable interfaz. Eso significa que podemos llamar aDispose() método en objetos de estas clases. También han definido unapublic método llamadoClose(). Ahora eso me confunde, ¿qué debo llamar una vez que haya terminado con los objetos? ¿Qué pasa si llamo a ambos?

Mi código actual es este:

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();
   }
}

Como ves, he escritousing() construcciones, que llaman automáticamente aDispose() método en cada objeto. Pero también llamo aClose() métodos. ¿Es correcto

Por favor, sugiérame las mejores prácticas al usar objetos de flujo. : -)

l ejemplo de @MSDN no usausing() construye y llama aClose() método:

Cómo: Descargar archivos con FTP

¿Esta bien

Respuestas a la pregunta(4)

Su respuesta a la pregunta