C# - Manejo de excepciones
Una excepción es un problema que surge durante la ejecución de un programa. Una excepción de C# es una respuesta a una circunstancia excepcional que surge mientras se ejecuta un programa, como un intento de dividir por cero.
Las excepciones proporcionan una forma de transferir el control de una parte de un programa a otra. El manejo de excepciones de C# se basa en cuatro palabras clave:intentar , atrapar , finalmente y lanzar .
-
intentar − Un bloque de prueba identifica un bloque de código para el cual se activan excepciones particulares. Es seguido por uno o más bloques catch.
-
atrapar − Un programa detecta una excepción con un controlador de excepciones en el lugar del programa donde desea manejar el problema. La palabra clave catch indica la captura de una excepción.
-
finalmente − El bloque finalmente se usa para ejecutar un conjunto dado de sentencias, ya sea que se lance o no una excepción. Por ejemplo, si abre un archivo, debe cerrarse ya sea que se genere una excepción o no.
-
lanzar − Un programa lanza una excepción cuando aparece un problema. Esto se hace usando una palabra clave throw.
Sintaxis
Suponiendo que un bloque genera una excepción, un método detecta una excepción mediante una combinación de las palabras clave try y catch. Se coloca un bloque try/catch alrededor del código que podría generar una excepción. El código dentro de un bloque try/catch se conoce como código protegido, y la sintaxis para usar try/catch es similar a la siguiente:
try { // statements causing exception } catch( ExceptionName e1 ) { // error handling code } catch( ExceptionName e2 ) { // error handling code } catch( ExceptionName eN ) { // error handling code } finally { // statements to be executed }
Puede enumerar varias declaraciones de captura para detectar diferentes tipos de excepciones en caso de que su bloque de prueba genere más de una excepción en diferentes situaciones.
Clases de excepción en C#
Las excepciones de C# están representadas por clases. Las clases de excepción en C# se derivan principalmente directa o indirectamente de System.Exception clase. Algunas de las clases de excepción derivadas de la clase System.Exception son System.ApplicationException y System.SystemException clases.
La excepción System.ApplicationException La clase admite excepciones generadas por programas de aplicación. Por lo tanto, las excepciones definidas por los programadores deben derivar de esta clase.
La excepción System.SystemException class es la clase base para todas las excepciones del sistema predefinidas.
La siguiente tabla proporciona algunas de las clases de excepción predefinidas derivadas de la clase Sytem.SystemException −
Sr.No. | Clase de excepción y descripción |
---|---|
1 | System.IO.IOException Maneja errores de E/S. |
2 | System.IndexOutOfRangeException Maneja los errores generados cuando un método se refiere a un índice de matriz fuera de rango. |
3 | System.ArrayTypeMismatchException Maneja los errores generados cuando el tipo no coincide con el tipo de matriz. |
4 | System.NullReferenceException Maneja los errores generados al hacer referencia a un objeto nulo. |
5 | System.DivideByZeroException Maneja los errores generados al dividir un dividendo con cero. |
6 | System.InvalidCastException Maneja los errores generados durante el encasillamiento. |
7 | Excepción System.OutOfMemory Maneja errores generados por memoria libre insuficiente. |
8 | Excepción System.StackOverflow Maneja los errores generados por el desbordamiento de pila. |
Manejo de excepciones
C# proporciona una solución estructurada para el manejo de excepciones en forma de bloques de prueba y captura. Al usar estos bloques, las declaraciones del programa principal se separan de las declaraciones de manejo de errores.
Estos bloques de manejo de errores se implementan usando el método try , atrapar y finalmente palabras clave El siguiente es un ejemplo de lanzar una excepción cuando se produce la condición de dividir por cero −
Demostración en vivousing System; namespace ErrorHandlingApplication { class DivNumbers { int result; DivNumbers() { result = 0; } public void division(int num1, int num2) { try { result = num1 / num2; } catch (DivideByZeroException e) { Console.WriteLine("Exception caught: {0}", e); } finally { Console.WriteLine("Result: {0}", result); } } static void Main(string[] args) { DivNumbers d = new DivNumbers(); d.division(25, 0); Console.ReadKey(); } } }
Cuando el código anterior se compila y ejecuta, produce el siguiente resultado −
Exception caught: System.DivideByZeroException: Attempted to divide by zero. at ... Result: 0
Creación de excepciones definidas por el usuario
También puede definir su propia excepción. Las clases de excepción definidas por el usuario se derivan de la Excepción clase. El siguiente ejemplo demuestra esto −
Demostración en vivousing System; namespace UserDefinedException { class TestTemperature { static void Main(string[] args) { Temperature temp = new Temperature(); try { temp.showTemp(); } catch(TempIsZeroException e) { Console.WriteLine("TempIsZeroException: {0}", e.Message); } Console.ReadKey(); } } } public class TempIsZeroException: Exception { public TempIsZeroException(string message): base(message) { } } public class Temperature { int temperature = 0; public void showTemp() { if(temperature == 0) { throw (new TempIsZeroException("Zero Temperature found")); } else { Console.WriteLine("Temperature: {0}", temperature); } } }
Cuando el código anterior se compila y ejecuta, produce el siguiente resultado −
TempIsZeroException: Zero Temperature found
Lanzamiento de objetos
Puede lanzar un objeto si se deriva directa o indirectamente de System.Exception clase. Puede usar una instrucción throw en el bloque catch para lanzar el objeto presente como −
Catch(Exception e) { ... Throw e }
Lenguaje C
- C # usando
- Manejo de archivos C
- Manejo de excepciones de Python Uso de la instrucción try, except y finalmente
- Manejo de excepciones de Java
- Manejo de excepciones de C++:ejemplo Try, Catch, throw
- Manejo de excepciones de Python:probar, atrapar, finalmente y aumentar [Ejemplo]
- Manejo de señales C++
- Java 9 - Sistema de módulos
- PLC frente a DCS
- El sistema modular de manipulación de tarimas permite una producción flexible
- El sistema de manejo de tarimas se expande para respaldar los cambios de producción