Classi come Stream
, StreamReader
, StreamWriter
ecc implementa IDisposable
l'interfaccia. Ciò significa che possiamo chiamare il Dispose()
metodo su oggetti di queste classi. Hanno anche definito un public
metodo 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")) { }