Interesting C# Note
As it turns out, if you have a situation like this:
using (IDisposable foo = new foo())
{
throw new Exception();
}
foo.Dispose() will be called. This is because the call to Dispose() is actually implemented within a finally block when the code is compiled.