En C #, l' usinginstruction 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 usingest 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 usingbloc plutôt que deux commandes distinctes.
Exemples:
MiniProfiler , écrit par l'équipe Stack Overflow, utilise
usingpour 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
usingpour 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
usingest 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.