Что такое блок C # Using и почему я должен его использовать?

Какова цель использования блока в C #? Чем он отличается от локальной переменной?

Если тип реализует IDisposable, он автоматически удаляет его.

Данный:

public class SomeDisposableType : IDisposable { ...implmentation details... } 

Они эквивалентны:

 SomeDisposableType t = new SomeDisposableType(); try { OperateOnType(t); } finally { t.Dispose(); } 

 using (SomeDisposableType u = new SomeDisposableType()) { OperateOnType(u); } 

Второй легче читать и поддерживать.

Using вызовов Dispose() после того, как using -block, останется, даже если код вызывает исключение.

Таким образом, вы обычно используете using для classов, которые требуют очистки после них, например, IO.

Итак, это использование блока:

 using (MyClass mine = new MyClass()) { mine.Action(); } 

будет делать то же самое, что:

 MyClass mine = new MyClass(); try { mine.Action(); } finally { if (mine != null) mine.Dispose(); } 

Использование using намного короче и легче читать.

Из MSDN:

C # через среду выполнения Common Language (CLR) .NET Framework автоматически освобождает память, используемую для хранения объектов, которые больше не требуются. Выпуск памяти не является детерминированным; память освобождается всякий раз, когда CLR решает выполнить сборку мусора. Однако обычно лучше как можно быстрее выпускать ограниченные ресурсы, такие как файлы и сетевые подключения.

Оператор using позволяет программисту указывать, когда объекты, использующие ресурсы, должны их освобождать. Объект, предоставленный оператору using, должен реализовывать интерфейс IDisposable. Этот интерфейс предоставляет метод Dispose, который должен освобождать ресурсы объекта.

Другими словами, оператор using говорит .NET, чтобы освободить объект, указанный в блоке using когда он больше не нужен.

Оператор using используется для работы с объектом на C #, который реализует интерфейс IDisposable .

Интерфейс IDisposable имеет один открытый метод Dispose который используется для удаления объекта. Когда мы используем инструкцию using, нам не нужно явно распоряжаться объектом в коде, оператор use заботится об этом.

 using (SqlConnection conn = new SqlConnection()) { } 

Когда мы используем вышеуказанный блок, внутренний код генерируется следующим образом:

 SqlConnection conn = new SqlConnection() try { } finally { // calls the dispose method of the conn object } 

Подробнее читайте: Понимание инструкции ‘using’ в C # .

Размещение кода в используемом блоке гарантирует, что объекты будут размещены (хотя и не обязательно собраны), как только элемент управления покинет блок.

Также обратите внимание, что объект, созданный с помощью using , доступен только для чтения в блоке использования. Обратитесь к официальной ссылке C # здесь .

 using (B a = new B()) { DoSomethingWith(a); } 

эквивалентно

 B a = new B(); try { DoSomethingWith(a); } finally { ((IDisposable)a).Dispose(); } 

На самом деле это просто какой-то синтаксический сахар, который не требует, чтобы вы вызывали вызов Dispose на членах, которые реализуют IDisposable.

Оператор using получает один или несколько ресурсов, выполняет оператор, а затем удаляет ресурс.

  • Для чего нужен фальшивый оператор в C #?
  • Характер Caret между типами, а не переменными, окруженный круглыми скобками
  • Что это за "foo. (Bar.Baz)" вещь в коде Go?
  • Как выбрать все листовые узлы с помощью выражения XPath?
  • Как работает цикл for, особенно для (;;)?
  • Код цвета кода кодирования xcode / не работает
  • Как получить доступ к элементу шаблона управления из кода
  • Что такое синтаксис инициализации структуры тегов?
  • Как запросить вложенные объекты?
  • Как я могу разделить команду оболочки на несколько строк при использовании оператора IF?
  • Почему шестнадцатеричные числа с префиксом 0x?
  • Interesting Posts

    Необходимо, чтобы Woocommerce разрешала только 1 продукт в корзине. Если продукт уже находится в корзине, а еще один добавлен, он должен удалить предыдущие 1

    Java: разделение имени файла на базу и расширение

    Увеличение максимального размера кучи JVM для приложений с интенсивной памятью

    Как я могу сказать gcc не встраивать функцию?

    Taskkill – конечные задачи с названиями окон, заканчивающимися определенной строкой

    Почему в IEnumerable нет метода расширения ForEach?

    Как обновить пользовательский интерфейс из другого streamа, запущенного в другом classе

    Проверка содержимого стандартного контейнера (std :: map) с помощью gdb

    Исключение SQLite: проблема блокировки базы данных

    Запуск JSF 2.0 на контейнере Servlet 2.4

    Массовое преобразование .xls и .xlsx в .txt (вкладка с разделителями) на Mac

    Может ли кто-то отслеживать поиск по большой беспроводной сети?

    Установить страницу по умолчанию для ViewPager в Android

    Добавить jar в classpath во время выполнения под java 9

    Получить функцию в PS1 (Zsh)?

    Давайте будем гением компьютера.