安全な using ステートメント
- GenericなメソッドやクラスではIDisposableなクラスのサポートを忘れないようにしよう (かずきの Blog@Hatena )
- More Effective C#
私もなるほどなーと思いました。
class Foo { // IDisposable を実装していない public void Hoge() { Console.WriteLine("Execute Foo.Hoge()"); } } class Test { static void Main() { var f = new Foo(); using (var z = f as IDisposable) { // z は null になる(実行時エラーは発生しない) f.Hoge(); } } }
# まぁ個人的には、明示的に Dispose を呼ぶ必要のあるクラスのインスタンスを返すファクトリーなんて作るべきじゃない、と思ったりもしますが。 ^^;
# 状況によっては必要になる事もあるので、この手法は知っておくといいですね。