C#で勝手にDisposeしてくれる方のusing。
例外出てもDispose呼んでくれるので便利だけど、気になって確認したのでメモ。
- using(A hoge1 = new A(), hoge2 = new A()) { } と、
using(A hoge1 = new A()) {using(A hoge2 = new A()) { } } は処理順も同じなので、安心して使ってよい。 - usingで対応できるのは、変数に代入できた場合のみ。
たとえば、using(A hoge = new A()) で、Aのコンストラクタ処理で例外発生した場合にはhoge.Dispose()は呼ばれない。
まぁ、当たり前っちゃー当たり前だけど、後者は重要な気がする。
どんな場合でもDispose呼んでくれると思って、コンストラクタ等で例外出しまくると、意図しないことになる可能性があるってことだ。
おまけ。
IDisposable実装しながら、Disposeを隠ぺいしちゃってるクラスがあるんだけど、そういう場合に。
using(IDisposable disp = hogehoge as IDisposable) { }
これで、IDisposable実装していれば、Disposeしてくれる。
意外に便利。
コメントしちゃいなよ