Creación de excepciones personalizadas

Creación de excepciones personalizadas

En algunos escenarios de trabajo, puede suceder que la información proporcionada por alguno de los objetos Exception no se ajuste a lo que realmente necesitamos. Es por tanto, hora de crear una clase, que heredando de la clase base Exception, contenga la información a la medida en que la precisamos.

Supongamos, tal como vemos en el Código fuente 403, que escribimos la clase CtaCredito, para llevar el control de cuentas bancarias. En ella introduciremos el titular de la cuenta y un importe para el crédito que necesitemos asignar. No obstante, dicho crédito no podrá sobrepasar el valor de 2500; así que, para controlar tal circunstancia, creamos adicionalmente, la clase CreditoException, que heredando de Exception, contendrá información en uno de sus miembros, sobre la excepción producida en cuanto al importe que se intentó asignar a la cuenta.

' clase que contiene información sobre una cuenta bancaria Public Class CtaCredito

Private msTitular As String Private mdbDisponible As Double

Public Property Titular() As String Get Return msTitular End Get Set(ByVal Value As String)

msTitular = Value End Set End Property

Public ReadOnly Property Credito() As Double Get Return mdbDisponible End Get End Property

© Grupo EIDOS 26. Manipulación de errores

' en este método, si se intenta asignar un importe ' superior al permitido, se lanza una excepción, ' utilizando un objeto de la clase CreditoException, ' heredado de Exception Public Sub AsignarCredito(ByVal ldbCredito As Double)

If ldbCredito > 2500 Then Throw New CreditoException("Límite disponible: 2500 " & _ "- Se intentó asignar " & CType(ldbCredito, String)) Else mdbDisponible = ldbCredito End If End Sub End Class

' ------------------------------------------------- ' esta clase contiene la información sobre un error ' producido en un objeto CtaCredito Public Class CreditoException

Inherits Exception

Private msDescripcion As String

Public Sub New(ByVal lsDescripcion As String) msDescripcion = lsDescripcion End Sub

Public ReadOnly Property Descripcion() As String Get Return msDescripcion End Get End Property End Class

Código fuente 403

El esquema del proceso es el siguiente: cuando al método AsignarCredito( ), de un objeto CtaCredito, se intente asignar un valor no permitido, se genera un nuevo objeto CreditoException y se lanza a través de la palabra clave Throw, que es la encargada de emitir las excepciones en el entorno de ejecución.

Desde código cliente, el uso de estas clases sería el que muestra el Código fuente 404.

Module Module1 Public Sub Main() ' crear un objeto de la nueva clase Dim oCredito As New CtaCredito()

Try ' asignar valores a propiedades oCredito.Titular = "Jaime Peral" oCredito.AsignarCredito(1000) ' esto no produce error Console.WriteLine("El credito actual de {0} es {1:C}", _

oCredito.Titular, oCredito.Credito)

' esta instrucción sí produce error oCredito.AsignarCredito(5000)

Catch oExcep As CreditoException ' manipulador para las excepciones producidas ' sobre un objeto CtaCredito Console.WriteLine("Error al asignar crédito: {0}", oExcep.Descripcion)

Programación con Visual Basic .NET © Grupo EIDOS

Finally Console.WriteLine("El controlador de errores ha finalizado") End Try

Console.ReadLine() End Sub End Module

Código fuente 404