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
- Classe e Propriedades de Exceção
- Como: Usar o bloco Try-Catch para apanhar exceções
- Como: Utilizar exceções específicas num bloco de captura
- Como: Explicitamente Lançar Exceções
- Como: Criar exceções User-Defined
- Utilizando manipuladores de exceções User-Filtered
- Como: Utilizar finalmente blocos
- Tratamento com exceções interop COM
- Melhores Práticas para Exceções
- O que cada Dev precisa de saber sobre exceções no tempo de execução