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