IDisposable(2)
Disposeメソッドが例外で落ちたときでも他のDisposeメソッドが呼ばれるかどうか。
using System; class Program : IDisposable { private static int count = 0; private readonly int id = count++; public void Dispose() { Console.WriteLine("dispose {0}", id); throw new Exception("The method or operation is not implemented."); } static void Main(string[] args) { try { using (Program p1 = new Program()) using (Program p2 = new Program()) { Console.WriteLine("proc"); } Console.WriteLine("end"); } catch (Exception) { Console.WriteLine("error"); } } }
で、こうなる。
proc
dispose 1
dispose 0
error
と言うことで、Disposeが例外で落ちても他のDiposeメソッドは呼ばれる、と。
でも出来る限りこの手のメソッドで例外は送出したくない。