Vamos a utilizar los
eventos para cosas que esperamos que le suceda al objeto. A veces suceden cosas que no se
esperan. En .NET, las situaciones excepcionales son
tratadas con el uso de excepciones,
una implementación para el manejo de
las condiciones de error. Dicho programa
consiste en "manejar la excepción"
cuando se pueden producir errores. Se puede escribir código para "atrapar"
la excepción, con lo que la ejecución del programa no se detiene por completo. Por otra parte, se pueden crear
excepciones personalizadas para la
aplicación, para facilitar información específica
al programa y el
usuario acerca de qué ha ido mal.
Generar una excepción
Esta pequeña aplicación
enseña cómo se captura una excepción.
Sobre el evento Click de
un botón del formulario ponemos:
Private Sub
Boton_Click(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles
Boton.Click
Dim numbers() As Integer = {1, 2, 3, 4, 5}
MessageBox.Show(numbers(9))
End Sub
Al
ejecutar el programa saltará una excepción, pues intenta leer el índice 9 de un
array que tiene 5 elementos, y dice que el array está fuera de rango. Se puede
prevenir este error capturando la excepción.
Private Sub
Boton_Click(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles
Boton.Click
Dim numbers() As
Integer = {1, 2, 3, 4, 5}
Try
MessageBox.Show(numbers(9))
Catch ex As Exception
MessageBox.Show("Se produjo un error:
" & ex.Message)
End Try
End Sub
Ahora al ejecutar el
programa sale un error controlado.
Aunque no tenemos la oportunidad de elegir si parar o
continuar. Podemos poner código para que decida qué
decisión tomar.
Cómo escribir una clase para manejar nuestras propias Excepciones
Se pueden
generar
excepciones utilizando la palabra clave throw. En
.NET throw deriva de la clase System.Exception. Más
específicamente, las aplicaciones que tienen objetos throw deben
derivar de System.ApplicationException, el cual a su vez deriva de System.Exception.
La siguiente aplicación
muestra como derivar una clase excepción, Lanzar la excepción en condiciones
adecuadas y detectar la excepción con un bloque Try.
Esta
aplicación utiliza una clase persona con
propiedades Nombre y Apellidos. La clase
Proporciona un constructor que espera que el nombre con formato. Si el
parámetro constructor no sigue ese formato, el constructor de lanzar una excepción throw del tipo NameFormatIncorrectException.
Proporciona un constructor que espera que el nombre con formato. Si el
parámetro constructor no sigue ese formato, el constructor de lanzar una excepción throw del tipo NameFormatIncorrectException.
Colocar un ListBox, u
botón y una caja de texto en el formulario, y en la clase CPersona del proyecto Hospital
hacemos lo siguiente:
Crear la clase Excepción
Añadir esta clase para
gestionar la excepción.
Public Class
ExceptionFormatoNombreIncorrecto
Inherits System.ApplicationException
End Class
La clase ApplicationException tiene dos
propiedades de interés. La primera es la
Propiedad Message, que contiene una cadena que describe el error que ha ocurrido. La segunda es la propiedad Inner. Si se ha capturado una excepción throw, se puede pasar a la propiedad Inner.
Propiedad Message, que contiene una cadena que describe el error que ha ocurrido. La segunda es la propiedad Inner. Si se ha capturado una excepción throw, se puede pasar a la propiedad Inner.
Añadir los siguientes
constructores sobrecargados a la clase:
Public Sub New()
MyBase.New()
End Sub
Public Sub New(ByVal message As String)
MyBase.New(message)
End Sub
Public Sub New(ByVal message As String, ByVal innerException As
Exception)
MyBase.New(message, InnerException)
End Sub
Las clases de excepción en .NET Tienen
tres constructores, los cuales puede llamar a un juego
base constructor. Uno sin parámetros, y su mensaje en blanco. El segundo toma una
excepción, el texto del mensaje. El tercer parámetro establece el texto del mensaje la excepción interior. Con esto la clase de excepción se ha completado.
base constructor. Uno sin parámetros, y su mensaje en blanco. El segundo toma una
excepción, el texto del mensaje. El tercer parámetro establece el texto del mensaje la excepción interior. Con esto la clase de excepción se ha completado.
Crear la clase Persona
Añadir a la clase CPersona
Agregar el
siguiente código para sobrescribir el método ToString. Esta
propiedad se utiliza para mostrar la instancia de la clase CPersona en el ListBox
de control.
Public Overrides
Function ToString() As
String
Return (m_apellido & ", " & m_nombre)
End Function
Agregar el constructor
que toma un nombre formato “Nombre apellido" y envía cada
parte a su propiedad correspondiente.
Public Sub New(ByVal
NombreApellido As String)
Try
Dim splitCharacters As
String = "
"
Dim names() As String = _
NombreApellido.Split(splitCharacters.ToCharArray())
m_nombre = names(0)
m_apellido = names(1)
Catch ex As Exception
Throw New ExceptionFormatoNombreIncorrecto("No se puede encontrar el Nombre y el
Apellido en la cadena: " & NombreApellido, ex)
End Try
End Sub
En el evento click del
botón poner este código.
Private Sub
btnAnadirPersona_Click(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles
btnAnadirPersona.Click
Try
ListBox1.Items.Add(New CPersona(txtNombrePersona.Text))
Catch nameException As ExceptionFormatoNombreIncorrecto
If Not
IsNothing(nameException.InnerException) Then
MessageBox.Show(nameException.Message
& ControlChars.CrLf &
nameException.InnerException.Message)
Else
MessageBox.Show(nameException.Message)
End If
Catch ex As
Exception
MessageBox.Show(ex.Message)
End Try
txtNombrePersona.Text = ""
End Sub
Ahora al meter Juan Pérez en la caja de texto, al pulsar el
botón, el textbox muestra Pérez, Juan.
No hay comentarios:
Publicar un comentario