W języku C # using
instrukcja służy do deterministycznego usuwania zasobów bez oczekiwania na moduł odśmiecania. Na przykład można go użyć do:
Usuń polecenia SQL lub połączenia,
Zamknij strumienie, uwalniając źródło źródłowe jak plik,
Darmowe elementy GDI +,
itp.
Zauważyłem, że using
jest coraz częściej stosowany w przypadkach, w których nie ma nic do pozbycia się, ale tam, gdzie osoba dzwoniąca jest wygodniej napisać using
blok niż dwa osobne polecenia.
Przykłady:
MiniProfiler , napisany przez zespół Stack Overflow, używa
using
do oznaczania bloków do profilowania:using (profiler.Step("Name goes here")) { this.DoSomethingUseful(i - 1); }
Jednym alternatywnym podejściem byłoby posiadanie dwóch bloków:
var p = profiler.Start("Name goes here"); this.DoSomethingUseful(i - 1); profiler.Stop(p);
Innym podejściem byłoby użycie akcji:
profiler.Step("Name goes here", () => this.DoSomethingUseful(i - 1));
Program ASP.NET MVC wybrał również
using
formularze:<% using (Html.BeginForm()) { %> <label for="firstName">Name:</label> <%= Html.TextBox("name")%> <input type="submit" value="Save" /> <% } %>
Czy takie użycie jest właściwe? Jak to uzasadnić, biorąc pod uwagę, że istnieje kilka wad:
Początkujący byliby zagubieni, ponieważ takie użycie nie odpowiada temu, które wyjaśniono w książkach i specyfikacji językowej,
Kod powinien być wyrazisty. Tutaj cierpi ekspresja, ponieważ właściwe użycie
using
to pokazanie, że z tyłu znajduje się zasób, taki jak strumień, połączenie sieciowe lub baza danych, którą należy zwolnić bez czekania na śmieciarz.
using
: Ta ostatnia instrukcja (np.profiler.Stop(p)
) Nie jest gwarantowana, że zostanie wykonana w obliczu wyjątków i przepływu kontroli.