Manipulação e arremesso de exceções em .NET

As aplicações devem ser capazes de lidar com erros que ocorram durante a execução de forma consistente. .NET fornece um modelo para notificar as aplicações de erros de forma uniforme: .AS operações NET indicam falha ao lançar exceções.

Exceções

Uma exceção é qualquer condição de erro ou comportamento inesperado que seja encontrado por um programa de execução. As exceções podem ser lançadas devido a uma falha no seu código ou em código a que chama (como uma biblioteca partilhada), recursos indisponíveis do sistema operativo, condições inesperadas que o tempo de execução encontra (como código que não pode ser verificado) e assim por diante. A sua aplicação pode recuperar de algumas destas condições, mas não de outras. Embora possa recuperar da maioria das exceções à aplicação, não pode recuperar da maioria das exceções de tempo de execução.

Em .NET, uma exceção é um objeto que herda da System.Exception classe. Uma exceção é lançada a partir de uma área de código onde ocorreu um problema. A exceção é passada para cima da pilha até que a aplicação a manuseie ou o programa termine.

Exceções vs. métodos tradicionais de tratamento de erros

Tradicionalmente, o modelo de tratamento de erros de uma língua baseava-se na forma única da língua de detetar erros e localizar os manipuladores para eles, ou no mecanismo de tratamento de erros fornecido pelo sistema operativo. A forma como o tratamento de exceções .NET implementa o tratamento de exceções proporciona as seguintes vantagens:

  • O lançamento e manuseamento de exceções funcionam da mesma forma para as linguagens de programação .NET.

  • Não requer nenhuma sintaxe linguística específica para lidar com exceções, mas permite que cada idioma defina a sua própria sintaxe.

  • As exceções podem ser lançadas através do processo e até mesmo dos limites da máquina.

  • O código de tratamento de exceções pode ser adicionado a uma aplicação para aumentar a fiabilidade do programa.

As exceções oferecem vantagens em relação a outros métodos de notificação de erro, tais como códigos de devolução. As falhas não passam despercebidas porque se uma exceção for lançada e não lidares com isso, o tempo de funcionamento termina a tua candidatura. Os valores inválidos não continuam a propagar-se através do sistema como resultado de um código que não verifica um código de devolução de falhas.

Exceções comuns

A tabela que se segue enumera algumas exceções comuns com exemplos do que as pode causar.

Tipo de exceção Descrição Exemplo
Exception Classe base para todas as exceções. Nenhum (utilize uma classe derivada desta exceção).
IndexOutOfRangeException Lançado pelo tempo de execução apenas quando uma matriz é indexada incorretamente. Indexação de um conjunto fora da sua gama válida:
arr[arr.Length+1]
NullReferenceException Lançado pelo tempo de execução apenas quando um objeto nulo é referenciado. object o = null;
o.ToString();
InvalidOperationException Jogado por métodos quando em estado inválido. Ligando Enumerator.MoveNext() depois de retirar um item da coleção subjacente.
ArgumentException Classe base para todas as exceções de argumento. Nenhum (utilize uma classe derivada desta exceção).
ArgumentNullException Lançado por métodos que não permitem que um argumento seja nulo. String s = null;
"Calculate".IndexOf(s);
ArgumentOutOfRangeException Lançados por métodos que verificam se os argumentos estão num determinado intervalo. String s = "string";
s.Substring(s.Length+1);

Ver também