La influencia del orden de los manipuladores de excepciones
La influencia del orden de los manipuladores de excepciones
El orden en el que situemos las sentencias Catch dentro de una estructura Try...End Try, es determinante, a la hora de que ciertas excepciones puedan o no, ser capturadas. Por este motivo, al escribir un controlador de errores, se recomienda situar en primer lugar, los manipuladores más específicos, y dejar para el final, los más genéricos.
© Grupo EIDOS 26. Manipulación de errores
En el ejemplo que muestra el Código fuente 401 se pueden producir dos tipos de excepción: por desbordamiento, y por acceso a índice no existente en un array. El problema que tenemos en dicha construcción de código, reside en que el manipulador de excepciones de desbordamiento nunca se ejecutará, ya que en primer lugar hemos situado uno más genérico que captura todo tipo de excepciones, incluidas las que se produzcan por desbordamiento.
Public Sub Main() Dim byMiNum As Byte Dim aValores() As String = {"a", "b", "c"}
Try ' comienza el control de errores Console.WriteLine("Introducir un número") ' si no es un número Byte se produce error byMiNum = Console.ReadLine()
' esta línea produce error siempre, ya ' que no existe el índice 5 en el array aValores(5) = "d"
Catch oExcep As Exception ' manipulador genérico de excepciones, ' captura todo tipo de excepciones, por lo que si ' también se produce una excepción OverflowException, ' se ejecutará este manipulador, por estar situado primero Console.WriteLine("Se ha producido un error")
Catch oExcep As OverflowException ' captura de errores de desbordamiento, ' este manipulador nunca se ejecutará, por estar ' uno más genérico antes Console.WriteLine("El número introducido " & _
"no se encuentra en el rango adecuado")
Finally Console.WriteLine("El controlador de errores ha finalizado") End Try
Console.ReadLine() End Sub
Código fuente 401
En este caso que acabamos de ver, situaremos en primer lugar el manejador de excepciones de desbordamiento, y por último, el genérico.
Forzar la salida de un controlador de errores mediante Exit Try
A través de esta sentencia de la estructura Try...End Try, obligamos al flujo del programa a salir de la estructura de control de errores, desde cualquier punto de la misma en que nos encontremos.
En el Código fuente 402, y retomando parte del código del anterior ejemplo, vemos como en el bloque
de código del controlador de errores, forzamos la salida de la estructura sin haber finalizado de ejecutar todo el código propenso a errores.
Programación con Visual Basic .NET © Grupo EIDOS
' .... Try
' comienza el control de errores Console.WriteLine("Introducir un número") ' si no es un número Byte se produce error byMiNum = Console.ReadLine()
' salimos de controlador de errores ' sin finalizarlo Exit Try
' esta línea produce error siempre, ya ' que no existe el índice 5 en el array aValores(5) = "d"
Catch oExcep As OverflowException ' ....
Catch oExcep As Exception ' .... ' ....
End Try ' ....
Código fuente 402
Parts
» Visual branding biro perjalanan alam (1)
» El manifiesto del ensamblado
» Instalación de Visual Studio .NET
» Grabando texto en un fichero
» Principales elementos en nuestro entorno de trabajo
» Manejo de ventanas adicionales del IDE
» Conceptos mínimos sobre depuración
» Comparación de cadenas en base a un patrón. El operador Like
» Uso de paréntesis para mejorar la legibilidad de expresiones
» Sintaxis de un procedimiento Function
» Sobrecarga de procedimientos
» Abordando un problema mediante programación procedural
» Creación de propiedades para la clase
» Encapsulación a través de propiedades
» Creación de métodos para la clase
» Sobrecarga de métodos o polimorfismo, en una misma clase
» Espacios de nombres (namespaces)
» Acceso a espacios de nombre de otros ensamblados
» Herencia y sobre-escritura de métodos
» Diferencias entre sobrecarga y sobre-escritura en base al tipo de enlace
» Ocultamiento de miembros de una clase
» Comportamiento de las palabras clave Me, MyClass y MyBase ante la sobre-escritura de métodos
» Herencia y métodos constructores
» Clases abstractas o no instanciables
» Comprobación del tipo de un objeto y moldeado (casting)
» Destrucción de objetos y recolección de basura
» Creación y manipulación de estructuras
» Estructuras o clases, ¿cuál debemos utilizar?
» Manipulación de cadenas con la clase String
» Optimizando la manipulación de cadenas con la clase StringBuilder
» Extender las funcionalidades de una clase a través de delegados
» La clase EventArgs, o cómo obtener información del objeto emisor del evento
» Obtención de subarrays a partir de un objeto ArrayList
» Manejo básico de colecciones Hashtable
» Operaciones varias con colecciones Hashtable
» Manipulación de valores en una colección Queue
» Implementando un interfaz para crear una nueva colección
» Manipulación estructurada de errores
» La influencia del orden de los manipuladores de excepciones
» Creación de excepciones personalizadas
» Manipulación de archivos mediante File y FileInfo
» Manipulación de archivos mediante Directory y DirectoryInfo
» Monitorización del sistema de archivos con FileSystemWatcher
» Creación de un formulario básico
» Iniciar el formulario desde Main( )
» Codificación de los eventos de controles
» Selección de texto en un TextBox
» Compartiendo código entre controles
» Crear una clase derivada de un control
» Agregar un proyecto con un formulario derivado
» Crear un formulario heredado desde un proyecto independiente
» Creación de menús desde código
» Detectando el estado de finalización
» Crear un proceso de monitorización
» Comportamiento Modal de formularios
» Formularios dependientes y fijos en primer plano
» Dibujo con las clases Graphics y Pen
» Manipulación de los eventos de pintado en la clase Form
» Manipulando el grado de opacidad del formulario
» Integrando elementos. Un visualizador de gráficos
» Comparativa de ADO /ADO .NET
» Arquitectura de datos desconectados
» Una visión general de ADO .NET
» Espacios de nombres y clases en ADO .NET
» Empleo de Data Binding simple para navegar y editar datos
» Configurar por código las propiedades del DataGrid
Show more