Em C #, a using
instrução é usada para dispor de maneira determinística os recursos sem aguardar o coletor de lixo. Por exemplo, pode ser usado para:
Descarte comandos ou conexões SQL,
Feche os fluxos, liberando a fonte subjacente como um arquivo,
Elementos GDI + gratuitos,
etc.
Percebi que isso using
é usado cada vez mais nos casos em que não há nada a ser descartado, mas onde é mais conveniente para o chamador escrever um using
bloco em vez de dois comandos separados.
Exemplos:
O MiniProfiler , escrito pela equipe Stack Overflow, usa
using
para indicar blocos no perfil:using (profiler.Step("Name goes here")) { this.DoSomethingUseful(i - 1); }
Uma abordagem alternativa seria ter dois blocos:
var p = profiler.Start("Name goes here"); this.DoSomethingUseful(i - 1); profiler.Stop(p);
Outra abordagem seria usar ações:
profiler.Step("Name goes here", () => this.DoSomethingUseful(i - 1));
O ASP.NET MVC também selecionou os
using
formulários:<% using (Html.BeginForm()) { %> <label for="firstName">Name:</label> <%= Html.TextBox("name")%> <input type="submit" value="Save" /> <% } %>
Esse uso é apropriado? Como justificá-lo, uma vez que existem várias desvantagens:
Os iniciantes seriam perdidos, pois esse uso não corresponde ao explicado nos livros e nas especificações de idioma,
O código deve ser expressivo. Aqui, a expressividade sofre, pois o uso apropriado de
using
é mostrar que, por trás, existe um recurso, como um fluxo, uma conexão de rede ou um banco de dados que deve ser liberado sem aguardar o coletor de lixo.
using
: A última instrução (por exemploprofiler.Stop(p)
) não é garantida para ser executada diante de exceções e fluxo de controle.