Como se mencionó anteriormente, sólo el primer método se captura excepciones en la inicialización del objeto IDisposable, y tendrá el objeto en-alcance para el bloque de captura.
Además, el orden de las operaciones para los bloques catch y finally se invertirá dependiendo de su anidación.Tomemos el siguiente ejemplo:
public class MyDisposable : IDisposable
{
public void Dispose()
{
Console.WriteLine("In Dispose");
}
public static void MethodOne()
{
Console.WriteLine("Method One");
using (MyDisposable disposable = new MyDisposable())
{
try
{
throw new Exception();
}
catch (Exception ex)
{
Console.WriteLine("In catch");
}
}
}
public static void MethodTwo()
{
Console.WriteLine("Method Two");
try
{
using (MyDisposable disposable = new MyDisposable())
{
throw new Exception();
}
}
catch (Exception ex)
{
Console.WriteLine("In catch");
}
}
public static void Main()
{
MethodOne();
MethodTwo();
}
}
Esto imprimirá:
Method One
In catch
In Dispose
Method Two
In Dispose
In catch
A veces puede obtener acceso a 'A' como lo llama, según el tipo de 'Excepción'. Por ejemplo, una 'WebException' tiene una propiedad llamada' Response' que devuelve la instancia 'WebResponse' (o' WebResponse'-derived class) que se usó en el bloque 'using' que puede utilizar como desee. – Sheridan