Classes, tais como Stream
, StreamReader
, StreamWriter
etc implementos IDisposable
interface. Isso significa que podemos chamar o Dispose()
método nos objetos dessas classes. Eles também definiram um public
método chamado Close()
. Agora, isso me confunde, sobre o que devo chamar quando terminar os objetos? E se eu ligar para os dois?
Meu código atual é 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 você vê, escrevi using()
construções, que automaticamente chamam Dispose()
método em cada objeto. Mas eu também chamo Close()
métodos. Está certo?
Sugira-me as melhores práticas ao usar objetos de fluxo. :-)
O exemplo do MSDN não usa using()
construções e chama o Close()
método:
Isso é bom?
using (MemoryStream ms1 = new MemoryStream(), ms2 = new MemoryStream()) { }
. Quero dizer assim, onde você pode redefinir o tipo:using (MemoryStream ms = new MemoryStream()) using (FileStream fs = File.OpenRead("c:\\file.txt")) { }