using в C#

Всем доброго времени суток. На связи Алексей Гулынин. Помимо директивы using, которая используется в каждой программе, имеется ещё одна форма использование данного ключевого слова — в виде оператора. В прошлых статьях мы уже использовали данный оператор, в данной статье я бы хотел остановиться на нём более подробно.
Сразу приведу пример и затем поясню его:
using System; using System.IO; namespace TestProject { class Program { static void Main(string[] args) { string strToWrite = "Operator using 1"; StreamWriter streamWriter = new StreamWriter(@"D:\test.txt"); using (streamWriter) { streamWriter.Write(strToWrite); } Console.WriteLine("Нажмите клавишу для продолжения..."); Console.ReadLine(); } } }
В операторе using (в круглых скобках) используется выражение, в результате вычисления которого должен быть получен объект, который реализует интерфейс System.IDisposable. Если объект, не реализует данный интерфейс, то мы получим ошибку компиляции. В этом примере мы объект определили вне оператора using. Также можно писать следующим образом:
using (StreamWriter streamWriter = new StreamWriter(@"D:\test.txt", true)) { streamWriter.Write(strToWrite); }
Когда блок оператора using завершается — для объекта, который передан в using (в нашем случае streamWriter), автоматически вызывается метод Dispose(), который находится в интерфейсе System.IDisposable. При работе с потоками всегда следует помнить, что при завершении работы с ними, их нужно закрывать. То же самое можно сказать и при работе с базами данных, и при работе с сокетами или с другими источниками. Метод Dispose() как раз закрывает работу с потоком и освобождает ресурсы.
Следующий пример эквивалентен предыдущему:
StreamWriter streamWriter = new StreamWriter(@"D:\test.txt"); streamWriter.Write(strToWrite); streamWriter.Dispose();
В среде .NET Framework имеется множество ресурсов, которые реализуют интерфейс IDisposable.
Давайте программно получим все эти классы и запишем их в наш файл test.txt:
using (StreamWriter streamWriter = new StreamWriter(@"D:\test.txt")) { var typesofIDisposable = Assembly .Load("System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") .GetTypes() .Where(t => typeof(IDisposable).IsAssignableFrom(t)) .OrderBy(t => t.Name); foreach (var type in typesofIDisposable) { streamWriter.WriteLine(type); } }
В данном примере мы динамически подгружаем сборку "System" и выводим все типы, которые реализуют интерфейс IDisposable.
В данной статье вы узнали про ключевое слово using в C#
На связи был Алексей Гулынин, оставляйте свои комментарии, увидимся в следующих статьях.