Clases, tales como Stream
, StreamReader
, StreamWriter
etc. implementos IDisposable
interfaz. Eso significa que podemos llamar al Dispose()
método en objetos de estas clases. También han definido un public
método llamado Close()
. 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 puede ver, he escrito using()
construcciones, que llaman automáticamente al Dispose()
método en cada objeto. Pero también llamo Close()
métodos. ¿Es correcto?
Sugiérame las mejores prácticas al usar objetos de flujo. :-)
El ejemplo de MSDN no utiliza using()
construcciones y Close()
método de llamada :
¿Esta bien?
using (MemoryStream ms1 = new MemoryStream(), ms2 = new MemoryStream()) { }
. Me refiero a esto donde puedes redefinir el tipo:using (MemoryStream ms = new MemoryStream()) using (FileStream fs = File.OpenRead("c:\\file.txt")) { }