C#では、using
ステートメントを使用して、ガベージコレクターを待たずにリソースを確定的な方法で破棄します。たとえば、次の目的で使用できます。
SQLコマンドまたは接続を破棄します。
ストリームを閉じ、ファイルのように基礎となるソースを解放し、
無料のGDI +要素、
等
これは、using
処理するものが何もない場合にますます使用されていることに気付きましたが、呼び出し元using
が2つの個別のコマンドではなくブロックを書き込む方が便利な場合に使用します。
例:
Stack Overflowチームによって作成されたMiniProfilerは、
using
プロファイルするブロックを示すために使用します。using (profiler.Step("Name goes here")) { this.DoSomethingUseful(i - 1); }
1つの代替アプローチは、2つのブロックを持つことです。
var p = profiler.Start("Name goes here"); this.DoSomethingUseful(i - 1); profiler.Stop(p);
別のアプローチはアクションを使用することです:
profiler.Step("Name goes here", () => this.DoSomethingUseful(i - 1));
ASP.NET MVCも
using
フォームに選択されています。<% using (Html.BeginForm()) { %> <label for="firstName">Name:</label> <%= Html.TextBox("name")%> <input type="submit" value="Save" /> <% } %>
そのような使用法は適切ですか?いくつかの欠点があるため、それを正当化する方法:
初心者は本や言語仕様書で説明されている使い方に対応していないので失われるでしょう、
コードは表現力豊かでなければなりません。ここでは、表現力が低下します。適切な使用法は
using
、背後にガベージコレクターを待たずに解放する必要があるストリーム、ネットワーク接続、データベースなどのリソースがあることを示すためです。
using
ます。後者のステートメント(などprofiler.Stop(p)
)は、例外と制御フローに直面した場合の実行が保証されていません。