Класи, такі як Stream
, StreamReader
і StreamWriter
т.д. реалізує IDisposable
інтерфейс. Це означає, що ми можемо викликати Dispose()
метод на об'єктах цих класів. Вони також визначили public
метод, який називається Close()
. Тепер це мене бентежить, як мені зателефонувати, коли я закінчу з об’єктами? Що робити, якщо я дзвоню обом?
Мій поточний код такий:
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();
}
}
Як бачите, я написав using()
конструкції, які автоматично викликають Dispose()
метод кожного об'єкта. Але я також називаю Close()
методи. Це право?
Підкажіть, будь ласка, найкращі практики використання об’єктів потоку. :-)
Приклад MSDN не використовує using()
конструкції та Close()
метод виклику :
Це добре?
using (MemoryStream ms1 = new MemoryStream(), ms2 = new MemoryStream()) { }
. Я маю на увазі, як це, де ви можете змінити тип:using (MemoryStream ms = new MemoryStream()) using (FileStream fs = File.OpenRead("c:\\file.txt")) { }