sábado, 25 de julho de 2009

C# - Tratamento de Exceções

Esse post não será mais atualizado nesse blog. Para visualizar esse post em seu novo endereço, acesse:
http://milaneze.com.br/post/2009/07/25/C-Tratamento-de-Excecoes.aspx


O tratamento de exceções em C# é feito através do bloco try...catch...finally.

Tudo que possa causar alguma exceção, como por exemplo, uma divisão por zero, deve ser colocado dentro do bloco try.

Cada bloco catch responde a um determinado tipo de exceção, por exemplo: DivideByZeroException ou StackOverflowException.

O bloco finally é chamado existindo ou não uma exceção no bloco try.

Assim que uma exceção ocorre no bloco try, o código para e verifica o primeiro bloco catch para ver se o tipo de exceção corresponde, correspondendo ou não, o código passa para o próximo bloco catch e faz a mesma verificação. Após passar por todos blocos catch (ou mesmo não passando, caso não existam), o código dentro do bloco finally é executado.

Classes de exceção definidas pelo usuários devem ser derivadas da classe ApplicationException e todas exceções do CLR (Common Laguage Runtime) são herdadas da classe SystemException, ambas são derivadas da classe Exception.

Para chamar alguma exceção programaticamente, é possível usar o código throw new ClasseExcecao() dentro de um bloco try. Exemplo: throw new Exception("Erro: Divisão por zero");

O código abaixo é um exemplo de exceção de divisão por zero:

   1:  class Program

   2:  {

   3:      static void Main(string[] args)

   4:      {

   5:          int valor1 = Convert.ToInt16(Console.ReadLine());

   6:          int valor2 = Convert.ToInt16(Console.ReadLine());

   7:   

   8:          int valor3 = 0;

   9:   

  10:          try

  11:          {

  12:              valor3 = valor1 / valor2;

  13:          }

  14:          catch (DivideByZeroException excecao)

  15:          {

  16:              valor2 = 1;

  17:              valor3 = valor1 / valor2;

  18:              Console.WriteLine(excecao.Message);

  19:              Console.WriteLine("valor 2 passa a ser " + valor2.ToString());

  20:          }

  21:          finally

  22:          {

  23:              Console.WriteLine(valor3.ToString());

  24:          }

  25:   

  26:          Console.WriteLine("\n");

  27:   

  28:          try

  29:          {

  30:              throw new FormatException();

  31:          }

  32:          catch(FormatException excecao)

  33:          {

  34:              Console.WriteLine(excecao.Message);

  35:          }

  36:          Console.ReadLine();

  37:      }

  38:  }

Nenhum comentário: