En C #, la usingdeclaración se utiliza para disponer de manera determinista los recursos sin esperar al recolector de basura. Por ejemplo, se puede usar para:
Deseche comandos SQL o conexiones,
Cerrar transmisiones, liberando la fuente subyacente como un archivo,
Elementos GDI + gratuitos,
etc.
Noté que usingse usa cada vez más en casos donde no hay nada que desechar, pero donde es más conveniente para la persona que llama escribir un usingbloque en lugar de dos comandos separados.
Ejemplos:
MiniProfiler , escrito por el equipo de Stack Overflow, usa
usingpara denotar bloques para perfilar:using (profiler.Step("Name goes here")) { this.DoSomethingUseful(i - 1); }Un enfoque alternativo sería tener dos bloques:
var p = profiler.Start("Name goes here"); this.DoSomethingUseful(i - 1); profiler.Stop(p);Otro enfoque sería utilizar acciones:
profiler.Step("Name goes here", () => this.DoSomethingUseful(i - 1));ASP.NET MVC también elegido
usingpara formularios:<% using (Html.BeginForm()) { %> <label for="firstName">Name:</label> <%= Html.TextBox("name")%> <input type="submit" value="Save" /> <% } %>
¿Es apropiado ese uso? Cómo justificarlo, dado que hay varios inconvenientes:
Los principiantes se perderían, ya que dicho uso no se corresponde con el que se explica en los libros y las especificaciones del idioma,
El código debe ser expresivo. Aquí, la expresividad sufre, ya que el uso apropiado de
usinges mostrar que detrás hay un recurso, como una secuencia, una conexión de red o una base de datos que debe liberarse sin esperar al recolector de basura.
using:profiler.Stop(p)No se garantiza que la última declaración (por ejemplo ) se ejecute ante las excepciones y el flujo de control.