using System; class A : IDisposable{ public void Dispose(){ Console.WriteLine("Dispose A"); throw new Exception(); } } class B : IDisposable{ public void Dispose(){ Console.WriteLine("Dispose B"); } } class C : IDisposable{ A a = new A(); B b = new B(); public void Dispose(){ a.Dispose(); b.Dispose(); } } class D : IDisposable{ A a = new A(); B b = new B(); public void Dispose(){ using(a) using(b) {} } } class E : IDisposable{ A a = new A(); B b = new B(); public void Dispose(){ try{a.Dispose();}finally{ try{b.Dispose();}finally{ } } } } public class Test{ public static void Main(){ try{ using(C c = new C()){ Console.WriteLine("using C"); } } catch(Exception e){Console.WriteLine("catch");} Console.WriteLine("------------"); try{ using(D d = new D()){ Console.WriteLine("using D"); } } catch(Exception e){Console.WriteLine("catch");} Console.WriteLine("------------"); try{ using(E e = new E()){ Console.WriteLine("using E"); } } catch(Exception e){Console.WriteLine("catch");} } }