Sí, se llamará Dispose
. Se invoca tan pronto como la ejecución abandona el alcance del bloque using
, independientemente de los medios necesarios para abandonar el bloque, ya sea al final de la ejecución del bloque, una instrucción return
o una excepción.
Como @Noldorin señala correctamente, utilizando un bloque using
de código se compila en try
/finally
, con Dispose
ser llamado en el bloque finally
. Por ejemplo, el siguiente código:
using(MemoryStream ms = new MemoryStream())
{
//code
return 0;
}
se convierte efectivamente en:
MemoryStream ms = new MemoryStream();
try
{
// code
return 0;
}
finally
{
ms.Dispose();
}
Así, pues finally
está garantizado para ejecutar después de que el bloque de try
ha terminado la ejecución, independientemente de su ruta de ejecución, Dispose
se garantiza que sea llamado, no importa qué.
Para obtener más información, vea this MSDN article.
Adición:
Sólo una pequeña advertencia para añadir: Dispose
porque se garantiza que sea llamado, es casi siempre una buena idea para asegurarse de que Dispose
nunca se produce una excepción cuando se implementa IDisposable
. Desafortunadamente, hay algunas clases en la biblioteca central que hacen en ciertas circunstancias cuando se llama al Dispose
- ¡Te estoy mirando, WCF Service Reference/Client Proxy! - y cuando eso sucede, puede ser muy difícil rastrear la excepción original si se llamó al Dispose
durante un desenrollado de la pila de excepciones, ya que la excepción original se traga a favor de la nueva excepción generada por la llamada Dispose
. Puede ser enloquecedoramente frustrante. ¿O eso es frustrantemente enloquecedor? Uno de los dos. Tal vez ambos.
@JonH: Encuentra el duplicado exacto, luego vote para cerrar en ese caso por favor. – Noldorin
@Noldorin: Fui en busca de un engañado en esto, porque pensé que * debe * haberse preguntado antes, pero no pude encontrar uno. Supongo que todavía hay preguntas fáciles por ahí. :) – Randolpho
@JonH y @Noldorin - los duplicados se habrían presentado cuando se formó la pregunta, busca "preguntas similares", una característica que la gente parece no utilizar lo suficiente. –