En C #, l' using
instruction est utilisée pour disposer de manière déterministe des ressources sans attendre le garbage collector. Par exemple, il peut être utilisé pour:
Éliminer les commandes ou connexions SQL,
Fermer les flux, libérer la source sous-jacente comme un fichier,
Éléments GDI + gratuits,
etc.
J'ai remarqué que cela using
est de plus en plus utilisé dans les cas où il n'y a rien à disposer, mais où il est juste plus pratique pour l'appelant d'écrire un using
bloc plutôt que deux commandes distinctes.
Exemples:
MiniProfiler , écrit par l'équipe Stack Overflow, utilise
using
pour désigner les blocs à profiler:using (profiler.Step("Name goes here")) { this.DoSomethingUseful(i - 1); }
Une approche alternative serait d'avoir deux blocs:
var p = profiler.Start("Name goes here"); this.DoSomethingUseful(i - 1); profiler.Stop(p);
Une autre approche consisterait à utiliser des actions:
profiler.Step("Name goes here", () => this.DoSomethingUseful(i - 1));
ASP.NET MVC a également choisi
using
pour les formulaires:<% using (Html.BeginForm()) { %> <label for="firstName">Name:</label> <%= Html.TextBox("name")%> <input type="submit" value="Save" /> <% } %>
Une telle utilisation est-elle appropriée? Comment le justifier, compte tenu de plusieurs inconvénients:
Les débutants seraient perdus, car une telle utilisation ne correspond pas à celle qui est expliquée dans les livres et les spécifications linguistiques,
Le code doit être expressif. Ici, l'expressivité souffre, car l'utilisation appropriée de
using
est de montrer que derrière, il y a une ressource, comme un flux, une connexion réseau ou une base de données qui doit être libérée sans attendre le garbage collector.
using
: Cette dernière instruction (par exempleprofiler.Stop(p)
) n'est pas garantie d'être exécutée face aux exceptions et au flux de contrôle.