C sharp NET/Capítulo 12

De Wikilibros, la colección de libros de texto de contenido libre.
Versión para imprimir esta pagina


Manejo de excepciones[editar]



C# proporciona soporte integrado para el manejo de excepciones o decir situaciones anormales de funcionamiento, las cuales pueden ocurrir en cualquier momento durante la ejecución del programa y son manejadas por el código que se encuentra fuera del flujo normal de control.

Todo esto gracias a las instrucciones clave try, throw, catch y finally. C# proporciona una solución estructurada tanto a nivel del sistema como de aplicación. A pesar de que es muy similar a C++ en cuanto al manejo de excepciones existen varias diferencias, entre ellas que cada excepción está representada por una instancia de un tipo de clase derivado de System.Exception. En realidad es algo bastante simple:

try 
{ 
//haz esto... 
//si i = 0 throw una excepción 
} 
catch 
{ 
//si falló haz esto... 
} 
finally 
{ 
//haya fallado o no, haz esto... 
} 

Como se puede apreciar el manejo de excepciones es bastante sencillo y fácil de entender aunque no tengamos mucha experiencia programando, todo aquello que se puso entre las {} del try es un segmento de código en el que puede o no generarse un error en tiempo de ejecución(excepción), en caso de que haya habido un funcionamiento anómalo en el programa (excepción), la ejecución del código entra en el segmento de código catch y ejecuta el bloque de instrucciones que hemos definido para manejar ese error, finalmente el flujo del programa, haya o no habido excepción, entra en finally; aquí podemos poner rutinas para marcar los objetos que ya no se utilizarán de manera que el recolector de basura pueda liberar la memoria que dichos objetos ocupaban, rutinas que guarden un log de la aplicación para llevar un control de ¿cuántas veces ha fallado?, ¿por qué falló?, etc., todo bloque try puede tener uno o más catch para tratar cada una de las posibles excepciones, pero la flexibilidad de C# va más allá de eso, ya que nos permite lanzar nuestras propias excepciones, por ejemplo si un método no recibe un valor que debe recibir o recibe un valor que no puede procesar podemos lanzar nuestra propia excepción. Ejemplo:

using System; 
public class ManejoExcepciones 
{ 
 public static void Main() 
 { 
  try //Le hacemos saber que puede ocurrir un error 
  { 
   string s=null; //Declaramos un string y lo dejamos vacío 
   if (s == null) //Si el string esta vacío 
   throw(new ExcepcionCadenaVacia()); //Lanzamos un error personalizado 
   Console.WriteLine("Esto nunca se imprime"); //Si hay error el código sale de la ejecución normal 
   //es por eso que esta parte nunca se ejecuta 
  } 
  catch( ExcepcionCadenaVacia e ) //Atrapamos nuestro error 
  { 
   Console.WriteLine("La cadena esta vacía"); //Manejamos el error 
  } 
  finally 
  { 
   Console.WriteLine("Esto siempre se imprime"); //Esto siempre se ejecutará 
  } 
 } 
}
Versión para imprimir esta pagina