Академический Документы
Профессиональный Документы
Культура Документы
Realizado por: Diego Medina ISN6-A SANTA ANA DE CORO, ABRIL DEL 2013
NDICE
Pg. EXCEPCIONES Y CONTROL DE EXCEPCIONES. . . . . . . . . . . . . . . . . . . . . . PROPIEDADES. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . CONTROL DE EXCEPCIONES. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . BLOQUES CATCH. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . BLOQUES FINALLY. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . CREAR Y PRODUCIR EXCEPCIONES. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . EXCEPCIONES GENERADAS POR EL COMPILADOR. . . . . . . . . . . . . . . . . CONTROLAR UNA EXCEPCIN MEDIANTE TRY Y CATCH. . . . . . . . . . . EJECUTAR CDIGO DE LIMPIEZA MEDIANTE EL FINALLY. . . . . . . . . . . 3 3 4 5 6 6 7 9 10
REFERENCIAS ELECTRNICAS
PROPIEDADES
Cuando la aplicacin encuentra una circunstancia excepcional, como una divisin por cero o una advertencia de que no hay suficiente memoria, se genera una excepcin.
Utilice un bloque try alrededor de las instrucciones que puedan generar excepciones. Cuando se produce una excepcin dentro del bloque try, el flujo de control salta inmediatamente a un controlador de excepciones asociado, si existe alguno.
Si no hay un controlador de excepciones para una excepcin determinada, el programa deja de ejecutarse y presenta un mensaje de error.
Si un bloque catch define una variable de excepcin, puede utilizar dicho bloque para obtener ms informacin sobre el tipo de excepcin que se ha producido.
Las acciones que pueden producir una excepcin se ejecutan con la palabra clave try. Un controlador de excepciones es un bloque de cdigo que se ejecuta cuando se produce una excepcin. En C#, la palabra clave catch se utiliza para definir un controlador de excepciones.
Un programa que utiliza la palabra clave throw puede generar explcitamente excepciones. Los objetos de excepcin contienen informacin detallada sobre el error que incluye el estado de la pila de llamadas y una descripcin de texto del error. El cdigo se ejecuta en un bloque finally aunque se produzca una excepcin, permitiendo as que el programa libere recursos.
CONTROL DE EXCEPCIONES
Los programadores de C++ utilizan bloques try para separar el cdigo al que puede afectar una excepcin y bloques catch para controlar las excepciones resultantes. Se puede utilizar un bloque finally para ejecutar el cdigo independientemente de que se inicie una excepcin, lo cual es necesario a veces porque el cdigo que sigue a una construccin try/catch podra no ejecutarse si se produce una excepcin. Un bloque try se debe utilizar con un bloque catch o finally, y puede incluir varios bloques catch.
Ejemplo: try { // Cdigo de try (aqu). } catch (System.Exception ex) { // Cdigo para manejar excepcin (aqu). } finally { // Cdigo que se ejecuta despus del try (y posible catch) (aqu). }
BLOQUES CATCH
Un bloque catch puede especificar un tipo de excepcin que se detectar. Este tipo se denomina filtro de excepcin y debe ser el tipo Exception o uno derivado de ste. Las excepciones definidas por la aplicacin deberan derivarse de ApplicationException.
Es importante colocar los bloques catch con las clases de excepcin ms concretas (ms derivadas), en primer lugar. Debe detectar excepciones cuando se tenga un conocimiento especfico del motivo por el que se produjo la excepcin y pueda implementar una recuperacin concreta, por ejemplo, detectar una excepcin
BLOQUES FINALLY
Un bloque finally permite la limpieza de acciones realizada en un bloque try. Si el bloque finally est presente, se ejecuta despus de los bloques try y catch. Un bloque finally se ejecuta siempre, sin tener en cuenta si se produce una excepcin o si se encuentra un bloque catch que coincida con el tipo de excepcin.
Los programadores deberan producir excepciones cuando se presentan estas posibles situaciones:
El mtodo no puede finalizar su funcionalidad definida. Por ejemplo, si el parmetro de un mtodo tiene un valor no vlido. Se realiza una llamada inadecuada a un objeto, basada en el estado del objeto. Por ejemplo, al tratar de escribir en un archivo de slo lectura. En los casos en que el estado del objeto no permite realizar una operacin.
Cuando un argumento para un mtodo provoca una excepcin. En este caso, se debera detectar una excepcin original y se debera crear una instancia de ArgumentException.
Las excepciones contienen una propiedad denominada StackTrace. Esta cadena contiene el nombre de los mtodos en la pila actual de llamadas, junto con el nombre del archivo y nmero de lnea donde se produjo la excepcin para cada mtodo. CRL crea automticamente un objeto StackTrace desde el punto de la instruccin throw, de modo que las excepciones se deben producir desde el punto donde debe comenzar el seguimiento de la pila.
Todas las excepciones contienen una propiedad denominada Message. Esta cadena se debera establecer para explicar la razn de la excepcin. Tenga en cuenta que no se debe colocar informacin confidencial de seguridad en el texto del mensaje. Adems de Message, ArgumentException contiene una propiedad llamada ParamName que se debe establecer en el nombre del argumento que provoc que se produjera la excepcin. En el caso de un establecedor de propiedades, ParamName se debera establecer en value.
Excepcin
ArithmeticException
operaciones
aritmticas,
como
DivideByZeroException y OverflowException. Se produce cuando una matriz no puede ArrayTypeMismatchException almacenar un elemento dado porque el tipo real del elemento es incompatible con el tipo real de la matriz. DivideByZeroException Se produce cuando tiene lugar un intento de dividir un valor integral por cero. Se produce cuando tiene lugar un intento de IndexOutOfRangeException indizar una matriz cuando el ndice es menor que cero o se encuentra fuera de los lmites de la matriz. Se produce cuando tiene lugar un error en tiempo InvalidCastException de ejecucin en una conversin explcita de un tipo base a una interfaz o a un tipo derivado. NullReferenceException Se produce al intentar hacer referencia a un objeto cuyo valor es null. Se produce cuando el intento de asignar memoria OutOfMemoryException mediante el operador new da un error. Esto indica que la memoria disponible en Common Language Runtime se ha agotado. OverflowException Se produce cuando una operacin aritmtica en un contexto checked produce un desbordamiento. Se produce cuando se agota la pila de StackOverflowException excepciones debido a la existencia de demasiadas llamadas al mtodo pendiente; normalmente,
suele indicar un nivel de recursividad muy profundo o infinito. Se produce cuando un constructor esttico TypeInitializationException produce una excepcin sin que haya clusulas catch compatibles para capturarla.
Ejemplo:
En este ejemplo, IndexOutOfRangeException no es la excepcin ms adecuada: ArgumentOutOfRangeException tiene ms sentido para el mtodo porque el argumento de index pasado por el llamador produce el error. class TestTryCatch { static int GetInt(int[] array, int index) { try {
return array[index]; } catch (System.IndexOutOfRangeException e) CS0168 { System.Console.WriteLine(e.Message); /*Establece IndexOutOfRangeException a la nueva excepcion InnerException*/ throw new System.ArgumentOutOfRangeException("El Parmetro ndice Est Fuera de Rango.", e); } } } //
EJECUTAR FINALLY
CDIGO
DE
LIMPIEZA
MEDIANTE
EL
El propsito de una instruccin finally es asegurarse de que la limpieza necesaria de objetos, por lo general objetos que contienen recursos externos, se produzca inmediatamente, incluso cuando se produce una excepcin. Por ejemplo de esta limpieza es llamar a Close en FileStream inmediatamente despus de su uso en lugar de esperar que el objeto sea recolectado como elemento no utilizado por Common Language Runtime, de la siguiente manera: static void CodeWithoutCleanup()
10
{ System.IO.FileStream file = null; System.IO.FileInfo fileInfo = new System.IO.FileInfo("C:\\file.txt"); file = fileInfo.OpenWrite(); file.WriteByte(0xF); file.Close(); }
Para convertir este cdigo en una instruccin try, catch y finally, el cdigo de limpieza esta separado del cdigo activo como se muestra a continuacin: static void CodeWithCleanup() { System.IO.FileStream file = null; System.IO.FileInfo fileInfo = null; try { fileInfo = new System.IO.FileInfo("C:\\file.txt"); file = fileInfo.OpenWrite(); file.WriteByte(0xF); } catch(System.Exception e) {
11
Como puede producirse una excepcin en cualquier momento dentro del bloque try antes de la llamada a OpenWrite() o la propia llamada a OpenWrite() podra producir un error, no se garantiza que el archivo est abierto cuando se intenta cerrarlo. El bloque finally agrega una comprobacin para asegurarse de que el objeto FileStream no es null antes de llamar al mtodo Close. Sin la comprobacin de null, el bloque finally podra iniciar su propia excepcin NullReferenceException, pero se debera evitar producir excepciones en bloques finally si es posible.
12
REFERENCIAS ELECTRNICAS
Microsoft Corporation. 2013. Excepciones y Control de Excepciones. http://msdn.microsoft.com/es-es/library/ms173160(v=vs.80).aspx (6 Abr 2013).
13