using в C#

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#

На связи был Алексей Гулынин, оставляйте свои комментарии, увидимся в следующих статьях.


Комментарии:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *