2012年1月26日木曜日

C#/VB.NETのUsingステートメント

C#やVB.NETにはUsingステートメントというのがあります。
これはオブジェクトをnewしたとき、Usingで定義したスコープを抜けると自動的に破棄(Dispose)してくれます。
でもこれ、無駄にスコープが作られちゃうので私はあまり使いません。(積極的に使ってる人いるんだろうか?)
例えばファイルを3つ開きたいとき、
Sub OpenFiles
Using file = new FileStream(“FILE1.TXT”)
   Using file = new FileStream(“FILE2.TXT”)
      Using file = new FileStream(“FILE3.TXT”)
       ・・・
     End Using
  End Using
End Using
End Sub
スコープ(というかブロック)が3つもネストしてしまい、すごくムダです。
かといってTry~Finallyで明示的にDisposeするのも野暮ったいし。
親スコープ内を抜けた時にDisposeする言語仕様だったらすごくスッキリするんですけどね。
ちなみにC++ではauto_ptr使えばこれが出来ます。
Sub OpenFiles
Using file = new FileStream(“FILE1.TXT”)
Using file = new FileStream(“FILE2.TXT”)
Using file = new FileStream(“FILE3.TXT”)
End Sub

0 件のコメント:

コメントを投稿