2010-10-17 23 views
5

quiero saber ¿finalmente el bloque todavía se ejecuta en el manejo de excepciones incluso si no hay un bloque de catch correspondiente para el bloque try y si no es así, qué sucede? También quiero ahora excepción de sistema y diferencia de aplicaciónmanejo de excepciones en C#

Respuesta

13

Sí, no necesita un bloque catch en absoluto. El bloque finally siempre se ejecuta.

En cuanto a la diferencia entre System.Exception y System.ApplicationException: Exception es la clase base para todas las excepciones; ApplicationException se debe utilizar cuando se produce un error de aplicación no fatal. Vea el MSDN documentation.

Ver también best practices for handling exceptions.

+0

¿quiere decir después de ejecutar el bloque finally que se lanzará la excepción y el programa terminará? (cuando no hay un bloque de catch correspondiente) – NoviceToDotNet

+0

Bueno, sí y no. Se lanzará la excepción, pero podría haber otro bloque try-catch alrededor de la llamada a este, en cuyo caso el try-catch de nivel superior detectará esta excepción. –

+2

Como un aparte, no use 'ApplicationException'. Está en desuso. Use una excepción apropiada derivada de System.Exception (o derive la suya) en su lugar. – mtreit

4

Como otros mencionaron finally se ejecutará incluso si no hay un bloque catch. Esto es compatible con Java try finally patrón (que se puede lograr utilizando IDisposable y using).

Una excepción (vean lo que hice allí?) es cuando un StackOverflowException se lanza en cuyo caso el bloque de finallywill not run (ni tampoco un catch si uno está presente).

El bloque finally se ejecuta después de que el bloque try finalice (ya sea limpiamente o lanzando una excepción) como es de esperar por su ubicación en el código.

+0

+1 por mencionar esa pieza StackOverflowException –

+0

P.S. Me gusta la forma en que los 2 israelíes que respondieron esta pregunta se imaginan llevar a un niño en una mochila. (No puedes ver eso tan bien en mi foto, pero eso es lo que es ...);) –

+0

¿Qué ocurre? La excepción surge en el bloque catch ... ¿todavía se ejecutará finalmente? – NoviceToDotNet