Klasy takich jak Stream
, StreamReader
, StreamWriter
itp osprzęt IDisposable
interfejsu. Oznacza to, że możemy wywołać Dispose()
metodę na obiektach tych klas. Zdefiniowali również public
metodę o nazwie Close()
. To mnie wprawia w zakłopotanie, co mam nazwać, gdy skończę z przedmiotami? A jeśli zadzwonię do obu?
Mój obecny kod to:
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();
}
}
Jak widzisz, napisałem using()
konstrukcje, które automatycznie wywołują Dispose()
metodę na każdym obiekcie. Ale nazywam też Close()
metody. Czy to jest poprawne?
Proszę zasugerować najlepsze praktyki podczas używania obiektów strumieniowych. :-)
Przykład MSDN nie używa using()
konstrukcji i wywołania Close()
metody:
Czy to jest dobre?
using (MemoryStream ms1 = new MemoryStream(), ms2 = new MemoryStream()) { }
. Mam na myśli to w ten sposób, w którym można przedefiniować typ:using (MemoryStream ms = new MemoryStream()) using (FileStream fs = File.OpenRead("c:\\file.txt")) { }