9 ответов:
Если тип реализует 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-блок остается, даже если код выдает исключение.так что вы обычно используете
usingдля классов, которые требуют очистки после них, как IO.Итак, это с помощью блока:
using (MyClass mine = new MyClass()) { mine.Action(); }будет делать то же самое, что:
MyClass mine = new MyClass(); try { mine.Action(); } finally { if (mine != null) mine.Dispose(); }используя
usingпуть короче и легче читать.
от MSDN:
C#, через общую платформу .NET Framework среда выполнения языка (CLR), автоматически освобождает память, используемую для хранения объекты, которые больше не требуются. Освобождение памяти недетерминированный; память освобождается когда среда CLR решает выполнить сборка мусора. Тем не менее, это как правило, лучше выпустить ограниченное ресурсы, такие как дескрипторы файлов и сетевые подключения так же быстро, как вероятный.
использование заявление позволяет программист, чтобы указать, когда объекты что использование ресурсов должно освободить их. Объект, предоставленный в пользование оператор должен реализовать интерфейс IDisposable. Этот интерфейс реализует метод Dispose, который следует освободить ресурсы объекта.
иными словами,
usingзаявление рассказывает .Net, чтобы освободить объект, указанный в элементеusingблок, как только он больше не нужен.
оператор using используется для работы с объектом в C#, который реализует
IDisposableинтерфейс.The
IDisposableинтерфейс имеет один открытый метод называетсяDisposeкоторый используется для удаления объекта. Когда мы используем оператор using, нам не нужно явно избавляться от объекта в коде, оператор using заботится об этом.using (SqlConnection conn = new SqlConnection()) { }когда мы используем выше блок, внутренне код генерируется следующим образом:
SqlConnection conn = new SqlConnection() try { } finally { // calls the dispose method of the conn object }дополнительные Подробнее читайте: понимание оператора' using ' в C#.
размещение кода в блоке using гарантирует, что объекты будут удалены (хотя и не обязательно собраны), как только элемент управления покинет блок.
Также обратите внимание, что экземпляр объекта создается через
usingдоступно только для чтения в блоке using. Обратитесь к официальной ссылке C#здесь.
using (B a = new B()) { DoSomethingWith(a); }эквивалентно
B a = new B(); try { DoSomethingWith(a); } finally { ((IDisposable)a).Dispose(); }
Это действительно просто какой-то синтаксический сахар, который не требует от вас явного вызова Dispose для членов, реализующих IDisposable.
оператор using получает один или несколько ресурсов, выполняет оператор, а затем избавляется от ресурса.
Comments