checkpoint

自分用のIT技術系ノートです。古い情報や間違っている情報もあるので注意。

usingを使え!

IDisposableインターフェイスを実装したオブジェクトを利用する際、usingステートメントを利用するのはもう常識ですね。

usingが分からないC#プログラマはすぐにGoogle先生に聞いてください。

数分でわかるはずです。

ジョエル・スポルスキー風に言うと「分かるまでは一行たりともコーディングするな」ってレベルのもんです。

usingはtry〜finallyによるDispose呼び出しと、等価の処理を行います。

しかし可能な限りusingを使うべきなのです。理由は

  • 書き方が簡潔
  • Disposeの書き忘れが絶対ない
  • 変数のスコープが狭くて済む

というところですが、もう一つusingを薦めたい理由があります。

  • たとえオブジェクトがnullのままでもエラーは出ない

ということです。例えば

using(MyDisposableObject myObj = (isCreate ? new MyDisposableObject() : null))
{
   (略)
}

って書いて、仮にisCreate=falseのためmyObjがnullのままでも、usingを抜けるときにエラーになったりしません。
これがtry〜catchだと

MyDisposableObject myObj = null;
try
{
   myObj = (isCreate ? new MyDisposableObject() : null);
}
finally
{
   if(myObj != null) myObj.Dispose();
}

って書かないといけません。めんどくさいですね。

しかもfinallyでのnullチェックを忘れると、ここでエラーになってしまいます。(ぬるり)

というわけで、何が何でもusingを使えというお話でした。

広告を非表示にする