В C # using
оператор используется для детерминированного размещения ресурсов без ожидания сборщика мусора. Например, он может быть использован для:
Утилизируйте команды или соединения SQL,
Закрывайте потоки, освобождая основной источник как файл,
Бесплатные элементы GDI +,
и т.п.
Я заметил, что using
это все больше и больше используется в тех случаях, когда нечего распоряжаться, но когда вызывающей стороне просто удобнее написать using
блок, а не две отдельные команды.
Примеры:
MiniProfiler , написанный командой Stack Overflow, использует
using
для обозначения блоков в профиле:using (profiler.Step("Name goes here")) { this.DoSomethingUseful(i - 1); }
Одним из альтернативных подходов было бы иметь два блока:
var p = profiler.Start("Name goes here"); this.DoSomethingUseful(i - 1); profiler.Stop(p);
Другой подход заключается в использовании действий:
profiler.Step("Name goes here", () => this.DoSomethingUseful(i - 1));
ASP.NET MVC также выбран
using
для форм:<% using (Html.BeginForm()) { %> <label for="firstName">Name:</label> <%= Html.TextBox("name")%> <input type="submit" value="Save" /> <% } %>
Такое использование уместно? Как это оправдать, учитывая, что есть несколько недостатков:
Начинающие будут потеряны, так как такое использование не соответствует тому, которое объясняется в книгах и спецификации языка,
Код должен быть выразительным. Здесь страдает выразительность, поскольку надлежащее использование
using
состоит в том, чтобы показать, что позади есть ресурс, такой как поток, сетевое соединение или база данных, который должен быть освобожден без ожидания сборщика мусора.
using
: последнее (напримерprofiler.Stop(p)
) утверждение не гарантируется для выполнения в условиях исключений и потока управления.