Assina meu Feed ai!
Google
 


14 outubro 2006

Tratamento de erros no C# - Exception - Parte 1

Propriedades das Exceptions

Vamos considerar exemplo do artigo anterior sobre . Onde tínhamos suposto um form com dois campos (txtBase e txtAltura) e um botão que calcula a área de um triangulo e cujo código era:
try{ // Tenta executar esse bloco de código
int Base = Int32.Parse(txtBase.Text);
int Altura = Int32.Parse(txtAltura.Text);
int Area = Base * Altura / 2;
MessageBox.Show("Área = " + Area);
}
catch{ // Em caso de erro, executa esse bloco no lugar da mensagem padrão do .NET
MessageBox.Show("Por favor informe corretamente a base e a altura");
}
finally{ // Esse sempre será executado
txtBase.Clear();
txtAltura.Clear();
}

O Bloco catch é executado caso seja disparada uma exceção (Exception), mas cada exceção tem um tipo e propriedades. Entre as propriedades podemos citar a mensagem padrão (Message) da exceção e o trecho do código (Source) que a gerou por exemplo. Para termos acesso a essas informações, precisamos declarar uma variável do tipo Exception na chamada do comando catch dessa forma: catch(Exception erro). Vejamos como isso fica no nosso exemplo:


try{ // Tenta executar esse bloco de código
int Base = Int32.Parse(txtBase.Text);
int Altura = Int32.Parse(txtAltura.Text);
int Area = Base * Altura / 2;
MessageBox.Show("Área = " + Area);
}
catch(Exception erro){ // Declara a variável "erro" que contem as propriedades do erro
MessageBox.Show("Por favor informe corretamente a base e a altura");
MessageBox.Show(erro.Message); // Mostra a mensagem padrão da exceção
MessageBox.Show(erro.Source); // Mostra o trecho do código que gerou a exceção
}
finally{ // Esse sempre será executado
txtBase.Clear();
txtAltura.Clear();
}

No exemplo acima, coloquei mais duas MessageBox's que mostram as propriedades Message e Source do objeto erro (a exception), que contem respectivamente a mensagem de erro padrão da exception e o trecho do código que a gerou. Esse tratamento é genérico, ou seja, independente do tipo da exceção. O mais correto é tratar separadamente os tipos de exceções prováveis de um bloco.

Tipos de Exceções(Exceptions)

Há vários tipos de exceptions de acordo com a forma com que elas são geradas, por exemplo: se em algum momento for feito uma divisão por zero, será gerado uma exceção do tipo DivideByZeroException; se em algum momento for informado a um método um argumento fora do que foi especificado será gerado uma exceção do tipo FormatException, como no nosso exemplo acima caso cliquem no botão sem digitar nada nos campos ou digitem letras.

Segue alguns tipos de exceções:
DivideByZeroException: ocorre quando há uma divisão por zero;
FormatException: Argumento de tipo diferente do especificado no método;
OutOfMemoryException: Alocação de memória, através de new, falha;
NullReferenceException: uma referência nula (null) é utilizada indevidamente;
IndexOutOfRangeException: o índice do é menor do que zero ou fora do limite.

Vejamos como fica o nosso código exemplo tratando um possível FormatException:
try{ // Tenta executar esse bloco de código
int Base = Int32.Parse(txtBase.Text);
int Altura = Int32.Parse(txtAltura.Text);
int Area = Base * Altura / 2;
MessageBox.Show("Área = " + Area);
}
catch(FormatException){ // Não é preciso por um variável
MessageBox.Show("Por favor informe corretamente a base e a altura");
}
catch(Exception erro){ // Declara a variável "erro" que contem as propriedades do erro
MessageBox.Show(erro.Message); // Mostra a mensagem padrão da exceção
MessageBox.Show(erro.Source); // Mostra o trecho do código que gerou a exceção
}
finally{ // Esse sempre será executado
txtBase.Clear();
txtAltura.Clear();
}
No próximo artigo vou abordar como disparar uma exception, como criar sua própria exception e como criar uma mensagem padrão para nova exception! Não deixem de comentar, até lá!

Fontes de consulta:
Desenvolvendo com C# - Fabio Galuppo, Vanclei Matheus, Wallace Santos - Ed. Bookman
site: http://msdn2.microsoft.com/en-us/library/system.aspx

8 comments:

alsimoes disse...

Show de bola! Está bem claro e com o código bem comentado, muito bom.
Parabéns.

Anônimo disse...

Fantástico!
Você deve ter um excelente professor de C#!

Anderson Santana disse...

Li seus post hj e gostei muito...ficou bem claro..."Meninão!!!"

Anônimo disse...

nossa vc eh fida caraa
parabens valeu pela ajudaa
;D

;**

Will Cruds disse...

Parabens cara. Esta tudo bem claro . Perfeito !

Malcomtux disse...

Muito obrigado pessoal!

Anônimo disse...

Sou iniciante em C# e esta dica é exatamente o que eu preciso, um dia quero entender tanto quanto para como voce ajudar quem precisa.

Anônimo disse...

OLHa valeew ajudou muito