Classi come Stream, StreamReader, StreamWriterecc implementa IDisposablel'interfaccia. Ciò significa che possiamo chiamare il Dispose()metodo su oggetti di queste classi. Hanno anche definito un publicmetodo chiamato Close(). Ora questo mi confonde, su cosa dovrei chiamare una volta che ho finito con gli oggetti? Cosa succede se chiamo entrambi?
Il mio codice attuale è questo:
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();
}
}
Come vedi, ho scritto using()costrutti, che chiamano automaticamente Dispose()metodo su ogni oggetto. Ma chiamo anche Close()metodi. È giusto?
Per favore, suggeriscimi le migliori pratiche quando usi gli oggetti stream. :-)
L'esempio MSDN non usa using()costrutti e chiama il Close()metodo:
È buono?
using (MemoryStream ms1 = new MemoryStream(), ms2 = new MemoryStream()) { }. Voglio dire così dove puoi ridefinire il tipo:using (MemoryStream ms = new MemoryStream()) using (FileStream fs = File.OpenRead("c:\\file.txt")) { }