VB.NET - Criando suas próprias exceções

Uma das grandes e bem vindas novidades que o VB.NET trouxe é o novo tratamento de erros.

Se você ainda usa On error goto ...

...esqueça isso e procure conhecer a nova maneira de tratar erros que o VB.NET lhe oferece ; é mais elegante , estruturado e funcional.

Os conceitos básicos sobre o novo tratamento de erro disponível no VB.NET estão nos artigos :

Neste artigo eu vou mostrar como você pode criar as suas próprias exceções. Isto mesmo , você pode criar exceções personalizadas no VB.NET de uma maneira bem simples.

Um dos quesitos para entender o porque podemos fazer isto é o conceito de herança e o conceito de construtores pois as exceções que você pode criar são na verdade classes que herdam da classe Exception ou da classe ApplicationException e nas quais você define um novo construtor.

Os conceitos básicos sobre herança e construtores foram abordados nos artigos :

Um dos motivos para definir uma exceção personalizada é quando você ao distribuir uma aplicação desejar que qualquer violação das regras de negócio da aplicação tenha um tratamento especial com uma mensagem específica ao usuário. Em um projeto recente para um sistema de controle de locações eu criei uma exceção chamada CDexception que era disparada quando as regras de negócio para a locação de CDs eram violadas. É claro que isto é apenas um dos motivos você pode querer ser mais excêntrico e criar suas próprias exceções em qualquer circunstância.

Criando uma exceção personalizada

Uma exceção é uma condição de erro ou comportamento inesperado que ocorre durante a execução de um programa afetando  o fluxo normal da execução das instruções.

A Plataforma .NET fornece a Classe chamada System.Exception . Esta classe é a classe base para todas as exceções. Ela contém as seguintes propriedades:

  • HelpLink: Esta propriedade possui uma URL apontando para um arquivo contendo informações de ajuda sobre a exceção que ocorreu.
  • InnerInformation: Referencia uma exceção interna.
  • Message: Propriedade de contém a mensagem de erro da Exception.
  • Source: Retorna informações do Sistema que gerou o erro.
  • StackTrace: Esta propriedade contém o rastreamento de pilha. Ela pode ser usada para determinar a localização da ocorrência do erro.
    TargetSite: Informações sobre o método que lança a exceção.

Abaixo temos algumas das classes de exceções mais utilizadas

System.ArithmeticException - Classe base para exceções que ocorrem durante operações aritméticas. Ex: System.DivideByZeroException and System.OverflowException.

System.ArrayTypeMismatchException - ArrayTypeMismatchException é lançada quando um objeto incompatível esta sendo armazenado em um array.

System.DivideByZeroException - Ocorre quando há uma tentativa de dividir um número por zero.

System.IndexOutOfRangeException - IndexOutOfRangeException é lançada quando se tenta acesar um arrary usando um índice que menor que zero ou maior que o máximo índice permitido.

System.InvalidCastException - lançada quando um uma conversão de tipo explícita de um tipo base para um tipo derivado falha em tempo de execução.

System.NullReferenceException - Lançada quando um objeto ao ser acessado possui uma referência nula.

System.OutOfMemoryException - OutOfMemoryException é lançada quando não há memória suficiente para realizar a operação.

System.OverflowException - OverflowException é lançada quando em uma operação aritmética ocorre overflow.

ArgumentException - Lançada quando um argumento fornecido para o método não é válido.
 

Para criar sua exceção personalizada tudo o que você precisa fazer é criar uma classe que herde da classe Exception ou da classe Application.Exception.

Vamos então criar nossa exceção . Vou chamá-la de MinhaException (nada original...).

Abra o projeto no qual você deseja criar a exceção ou crie um projeto para gerar uma DLL que poderá ser referenciada pelo seu projeto.

Crie uma nova classe com o nome MinhaException (nome de classe sempre iniciam com letras maiúsculas , pelo menos eu trago esta definição do Java e a utilizo no VB.NET )

Digite o código abaixo na classe conforme mostrado abaixo:

Pronto , você acabou de criar sua primeira exceção personalizada. Não subestime o código pois com ele você poderá definir qualquer mensagem para sua exceção. Vamos detalhar um pouco mais o código :

A classe MinhaExcecao usa a palavra chave Inherits ; com isto estamos indicando que esta classe irá herdar da classe System.Exception . A classe System.Exception é a mãe das exceções.

Nossa classe utiliza dois construtores da classe Pai. Em um deles não é fornecido nenhum parâmetro , como consequência quando ocorrer um erro será exibido o erro padrão relacionado com a exceção ocorrida. Estou me referindo ao construtor:

Public Sub New()
    MyBase.New()
End Sub

O segundo construtor recebe um parâmetro do tipo string . O parâmetro Mensagem é a mensagem que eu quero exibir se ocorrer um exceção.

Public Sub New(ByVal Mensagem As String)
   MyBase.New(Mensagem)
End Sub


E como vamos usar esta exceção  no projeto ? É simples basta lançar a exceção toda vez que você estiver fazendo o tratamento de erros e desejar usar a sua exceção. Para lançar uma exceção você usa a palavra chave Throw .

Vamos a um exemplo para deixar tudo mais claro. Suponha que em seu projeto esta uma operação de divisão que divide dois números a e b.

Como você já deve saber das aulas de matemática , não existe divisão por zero e se o parâmetro b for igual a zero será lançada uma exceção do tipo System.DivideByZeroException . Para testar a nossa exceção vamos criar um novo projeto do tipo console no VB.NET e incluir o seguinte código:

Neste código eu estou efetuando a divisão de dois números usando a função divide(a,b). Este função recebe dois parâmetros inteiros e retorna o valor da divisão de a por b . Se b for igual a zero então estarei lançado a nossa exceção MinhaExcecao com a mensagem definida.

Module Module1
    Sub Main()
        Dim a, b As Integer
        Console.WriteLine("Informe o valor de a ")
        a = Val(System.Console.ReadLine())
        Console.WriteLine("Informe o valor de b ")
        b = Val(System.Console.ReadLine())
        Try
            Console.WriteLine(a & " dividido por " & b & " é igual a  " & divide(a, b))
            Console.ReadLine()
        Catch ex As MinhaExcecao
            Console.WriteLine(ex.Message)
            Console.ReadLine()
        End Try
    End Sub

    Public Function divide(ByVal a As Integer, ByVal b As Integer) As Integer
        If b = 0 Then
            Throw New MinhaExcecao("B não pode ter valor igual a ZERO.")
        End If
        Return a / b
    End Function
End Module

Executando o projeto e informando o valor zero para o parâmetro b teremos:

Por hoje é só isto... Até mais

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti