Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
933 of 1492 menu
◀ ▶

Конструкция using

Запись using (var res = ...) { } создаёт объект, реализующий IDisposable, и вызывает Dispose при выходе из блока - и при нормальном завершении, и при исключении. Краткая форма без скобок - в using var. Асинхронное освобождение - в await using.

Синтаксис

using (var res = new Door()) { // работа с ресурсом }

Пример

Давайте вызовем Dispose после блока using:

using System; class Door : IDisposable { public void Dispose() { Console.WriteLine("closed"); } } class Program { static void Main() { using (var res = new Door()) { Console.WriteLine("open"); } } }

Результат выполнения кода:

"open" "closed"

Пример

Давайте освободим ресурс даже при исключении в блоке:

using System; class Door : IDisposable { public void Dispose() { Console.WriteLine("closed"); } } class Program { static void Main() { try { using (var res = new Door()) { throw new InvalidOperationException("abcde"); } } catch (InvalidOperationException) { Console.WriteLine("caught"); } } }

Результат выполнения кода:

"closed" "caught"

Пример

Давайте сохраним текст из Dispose в поле и выведем после блока:

using System; class Door : IDisposable { public string Last = ""; public void Dispose() { Last = "closed"; } } class Program { static void Main() { Door door; using (door = new Door()) { Console.WriteLine("open"); } Console.WriteLine(door.Last); } }

Результат выполнения кода:

"open" "closed"

Смотрите также

  • using var,
    который освобождает в конце метода
  • await using,
    который вызывает DisposeAsync
  • блок finally,
    который тоже выполняется при выходе
  • блок try,
    внутри которого часто пишут using
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить