У 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)
) не гарантується, що воно буде виконане за винятком винятків та потоку контролю.