Hierarquia de exceções
Há dois tipos de exceções: exceções geradas por um programa em execução e exceções geradas pelo common language runtime. Além disso, há uma hierarquia de exceções que podem ser lançadas por um aplicativo ou pelo tempo de execução.
Exceção é a classe base para exceções. Várias classes de exceção herdam diretamente de Exception, incluindo ApplicationException e SystemException. Essas duas classes constituem a base para quase todas as exceções de tempo de execução.
A maioria das exceções que derivam diretamente de Exception não adicionam nenhuma funcionalidade à classe Exception. Por exemplo, a hierarquia de Classe InvalidCastException é da seguinte maneira:
Object Exceção SystemException InvalidCastException
O tempo de execução gera classe derivada apropriada de SystemException quando ocorrem erros. Esses erros resultam de verificações falhas do tempo de execução (como erroz de matriz e fora dos limites ) e podem ocorrer durante a execução de qualquer método. Se você estiver criando um aplicativo que cria novas exceções, você deve derivar essas exceções da classe Exception. Não é recomendável que você capture uma SystemException , nem é boa prática de programação lançar uma SystemException no seu aplicativo.
As exceções mais graves — aqueles lançadas pelo tempo de execução ou em condições irrecuperáveis — incluem ExecutionEngineException, StackOverflowException e OutOfMemoryException.
Exceções de interoperações derivam de SystemException e são ainda mais estendidas por ExternalException. Por exemplo, COMException é a exceção lançada durante operações de interoperabilidade COM e deriva de ExternalException. Win32Exceptione SEHException também derivam de ExternalException.
Hierarquia de exceções de tempo de execução
O tempo de execução tem um conjunto base de exceções que derivam de SystemException que ele lança ao executar instruções individuais. A tabela a seguir lista hierarquicamente as exceções padrão fornecidas pelo tempo de execução e as condições em que você deve criar um classe derivada.
Tipo de exceção |
Tipo base |
Descrição |
Exemplo |
---|---|---|---|
Object |
Classe base para todas as exceções. |
Nenhum (use uma classe derivada desta exceção). |
|
Exceção |
Classe base para todos os erros gerados pelo tempo de execução. |
Nenhum (use uma classe derivada desta exceção). |
|
SystemException |
Lançada pelo tempo de execução somente quando uma matriz é indexada incorretamente. |
Indexar uma matriz fora do seu intervalo válido: arr[arr.Length+1] |
|
SystemException |
Lançada pelo tempo de execução somente quando um objeto nulo é referenciado. |
object o = null; o.ToString(); |
|
Lançada pelo tempo de execução somente quando é acessada memória inválida. |
Ocorre ao interoperar com código não gerenciado ou código gerenciado não seguro, e um ponteiro inválido é usado. |
||
SystemException |
Lançada por métodos quando em um estado inválido. |
Chamar Enumerator.GetNext() depois de remover um Item da coleção subjacente. |
|
SystemException |
Classe base para todas as exceções de argumentos. |
Nenhum (use uma classe derivada desta exceção). |
|
ArgumentException |
Lançada por métodos que não permitem que um argumento seja nulo. |
String s = null; "Calculate".IndexOf (s); |
|
ArgumentException |
Lançada por métodos que verificam se os argumentos estão em um determinado intervalo. |
String s = "string"; s.Chars[9]; |
|
SystemException |
Classe base para exceções que ocorrem ou são direcionados para ambientes fora do tempo de execução. |
Nenhum (use uma classe derivada desta exceção). |
|
ExternalException |
Exceção que encapsula informações COM HRESULT. |
Usada em interoperabilidade COM. |
|
ExternalException |
Exceção que encapsula informações de manipulação estruturada de exceções do Win32. |
Usada em interoperações de código não gerenciado. |
Consulte também
Conceitos
Classe Exception e suas Propriedades
Práticas recomendadas para tratamento de exceções
Tratamento e lançamento de exceções