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
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.
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 finally
will 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.
+1 por mencionar esa pieza StackOverflowException –
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 ...);) –
¿Qué ocurre? La excepción surge en el bloque catch ... ¿todavía se ejecutará finalmente? – NoviceToDotNet
- 1. Manejo de excepciones generales en C#
- 2. Manejo de excepciones en Obj-C
- 3. C#: manejo de excepciones en llamada recursiva
- 4. Manejo de excepciones en C sin C++ en Linux
- 5. C# ThreadPool QueueUserWorkItem Manejo de excepciones
- 6. C# manejo de excepciones caída A través
- 7. Manejo de excepciones en linux
- 8. Manejo de excepciones en hilos
- 9. Manejo de excepciones JSF2
- 10. manejo de excepciones ofstream
- 11. Wcf manejo de excepciones
- 12. Manejo de excepciones AOP
- 13. Manejo de múltiples excepciones
- 14. BackgroundWorker manejo de excepciones
- 15. Python httplib2 Manejo de excepciones
- 16. Manejo de excepciones de C++ personalizadas en Cython
- 17. Sobrecarga del manejo de excepciones en D
- 18. manejo de excepciones ObjC en monotouch
- 19. Manejo de excepciones de nodo
- 20. Patrón de manejo de excepciones
- 21. XMLHttpRequest.open() el manejo de excepciones
- 22. ASP.NET MVC manejo de excepciones
- 23. Python: Queue.Empty manejo de excepciones
- 24. Robusto manejo de excepciones Javascript
- 25. Manejo de excepciones para ThreadPoolExecutor
- 26. Python solicita manejo de excepciones
- 27. Política de manejo de excepciones en bibliotecas
- 28. ¿Manejo de excepciones en scripts de shell?
- 29. manejo de excepciones en node.js y express
- 30. Manejo elegante de excepciones en Swing Worker
¿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
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. –
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