Come menzionato sopra, solo il primo metodo prenderà eccezioni nella inizializzazione dell'oggetto IDisposable, ed avrà l'oggetto in-scope per il blocco di cattura.
Inoltre, l'ordine delle operazioni per il blocco e infine i blocchi verrà invertito a seconda del loro annidamento.Prendiamo il seguente esempio:
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();
}
}
Questo stamperà:
Method One
In catch
In Dispose
Method Two
In Dispose
In catch
fonte
2013-06-26 01:27:47
A volte è possibile accedere a "A" come si chiama, a seconda del tipo di "Eccezione". Ad esempio, una 'WebException' ha una proprietà chiamata' Response' che restituisce l'istanza 'WebResponse' (o' derivata da WebResponse') che è stata usata nel blocco 'using' che sei libero di usare come desideri. – Sheridan