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

Объявление using var

Конструкция using var res = ...; не требует отдельных фигурных скобок: Dispose вызовут в конце метода или блока, где объявлена переменная. В отличие от using (...) { } граница ресурса - вся оставшаяся область, а не только внутренний блок.

Синтаксис

using var res = new Door(); // Dispose в конце метода

Пример

Давайте объявим using var и дойдём до конца Main:

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 - здесь Dispose раньше конца метода не вызывается:

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

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

"mid" "end" "closed"

Пример

Давайте ограничим область вложенным блоком:

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

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

"start" "inner" "closed" "after"

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

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