Класи, такі як 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")) { }