C# - Exception x Error
Hoje veremos os conceitos de Exception e Error e qual a diferença entre eles, se que há alguma diferença. |
Geralmente usamos as palavras Exception e Error de forma intercambiável, como se tivessem o mesmo significado.
Mas será que isso esta correto ? Os conceitos de Exception e Error são mesmo iguais ? Os conceitos são iguais. |
|
Uma Exception é um erro que é esperado ou conhecido e que pode ser tratado em tempo de execução. Sendo uma condição excepcional que altera o fluxo normal do programa e que pode ser prevista. Ex: Arquivo não encontrado, falha na conexão, falha ao gravar no banco de dados, etc.
Uma
exceção é um objeto de um tipo derivado da classe
System.Exception. Um SystemException é
lançado pelo CLR (Common Language Runtime) quando
ocorrem erros não-fatais e recuperáveis pelos programas do usuário.
Um Error é uma ocorrência inesperada que não pode ser tratada em tempo de
execução. Representa uma situação anormal que não era esperada.
Assim
erros são exceções não verificadas e o desenvolvedor não é obrigado a fazer nada
para tratar um erro.
Os erros normalmente tendem a sinalizar o final do programa, normalmente não
podem ser recuperados e devem fazer com que você saia do programa atual. Não
deve ser tratado ou manuseado.
Assim, todos os erros são exceções, mas o inverso não é verdadeiro. Em geral, os erros são situações que ninguém pode controlar ou prever quando vai ocorrer, por outro lado, uma exceção pode ser prevista e pode ser tratada.
Tipos de Erros
Classes de Exceções
Uma dos pontos básicos para um software robusto é um bom tratamento de exceções. É uma boa prática sempre estar na defesa como seu código. Você tem que supor que tudo pode falhar e atuar de forma a prever e tratar os possíveis casos onde as exceções podem ocorrer. Assim se você precisa abrir um arquivo para realizar uma operação tem que prever situações nais quais a localização e a abertura do arquivo podem falhar.
Se você não lidar com possíveis cenários de erro, inevitavelmente eles acontecerão e seus usuários terão problemas., alguns deles podem ser erros do usuário e pode não haver nada que você possa fazer sobre eles.
As exceções C# são representadas por classes. As classes de exceção em C# são direta ou indiretamente derivadas da classe System.Exception.
A classe
Exception é a classe base da qual todas as outras
exceções herdam e ela fornece várias propriedades úteis que auxiliam no
tratamento de exceções:
- StackTrace: um rastreamento de pilha para ver exatamente onde ocorreu a
exceção.
- InnerException: Útil quando as exceções estão encadeadas. Isso permite
que um tipo de exceção lance outro tipo de exceção, ad infinitum.
- Message: A mensagem detalhada indicando o que aconteceu.
- Data: Um dicionário que pode ser usado para armazenar dados arbitrários
associados a essa instância de exceção específica.
Algumas das classes de exceção derivadas da classe
System.Exception são as
classes System.ApplicationException e
System.SystemException.
A tabela a seguir fornece algumas das classes de exceção predefinidas derivadas
da classe Sytem.SystemException :
Classe de Exceção e Descrição |
---|
System.IO.IOException - Trata erro de I/O. |
System.IndexOutOfRangeException - Trata erro gerado por uma referência a um índice de um array fora do escopo. |
System.ArrayTypeMismatchException - Trata erros gerados quando o tipo incompatível com o tipo Array. |
System.NullReferenceException - Trata erros gerados a partir da referência a objetos null. |
System.DivideByZeroException - Trata erros gerados pela divisão por zero. |
System.InvalidCastException - Trata erros gerados durante a conversão de tipos |
System.OutOfMemoryException - Trata erros gerados a partir de memória insuficiente |
System.StackOverflowException - Trata erro gerados a partir do estoura da pilha |
Você deve
derivar suas exceções personalizadas da classe Exception em vez da classe
ApplicationException. Assim, você não deve lançar uma exceção
ApplicationException em seu código e não deve capturar uma exceção
ApplicationException, a menos que pretenda lançar novamente a exceção
original.
Uma razão simples para isso é que existem outras classes de exceção na
plataforma .NET derivadas de ApplicationException. Se você lançar
ApplicationException em seu código e capturá-la mais tarde, também poderá
capturar as exceções derivadas que podem interromper seu aplicativo.
E se você pretende gerar uma exceção personalizada considere usar um tipo de exceção existente no .NET Framework em vez de fazer a sua implementação.
A seguir temos alguns dos principais tipos de exceções comuns e as condições sob as quais gerá-los:
Você deve considerar a implementação de exceções personalizadas nos seguintes cenários:
Nestes casos um roteiro básico a seguir seria:
Evite lancar exceções
Lançar ou manipular uma exceção consome uma quantidade significativa de recursos do sistema e de tempo de execução.
Você deve lançar exceções somente para lidar com condições realmente extraordinárias e não para manipular eventos previsíveis ou de fluxo de controle. Assim você não deve gerar uma exceção para entradas inválidas do usuário e sim deve direcionar os usuários para inserir novamente os dados.
E estamos conversados...
"E também todos os que
piamente querem viver em Cristo Jesus padecerão perseguições.
Mas os homens maus e enganadores irão de mal para pior, enganando e sendo
enganados."
2 Timóteo 3:12,13
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET
https://msdn.microsoft.com/en-us/library/System.ApplicationException
https://msdn.microsoft.com/pt-br/library/system.exception(v=vs.110).aspx