sábado, 27 de mayo de 2017

Excepciones en Visual Basic.NET

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.

Excepciones en Visual Basic.NET


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.

Manejar excepciones con Visual Basic.NET


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.

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.

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.

Crear la clase Persona


Añadir a la clase CPersona

Public Class CPersona
    Private m_nombre As String
    Private m_apellido As String
     Public Property Nombre() As String
        Get
            Return (m_nombre)        End Get
        Set(ByVal Value As String)            m_nombre = Value        End Set
    End Property
     Public Property Apellido() As String
        Get
            Return (m_apellido)        End Get
        Set(ByVal Value As String)            m_apellido = Value        End Set
    End Property
End
Class

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