C# - Tratamento de Exceções
Uma exceção é um problema que surge durante a execução de um programa. Uma exceção C# é uma resposta a uma circunstância excepcional que surge enquanto um programa está em execução, como uma tentativa de dividir por zero.
As exceções fornecem uma maneira de transferir o controle de uma parte de um programa para outra. O tratamento de exceção C# é baseado em quatro palavras-chave:try , pegar , finalmente , e lançar .
-
tente − Um bloco try identifica um bloco de código para o qual exceções específicas estão ativadas. Ele é seguido por um ou mais blocos catch.
-
pegar − Um programa captura uma exceção com um manipulador de exceção no local de um programa em que você deseja tratar o problema. A palavra-chave catch indica a captura de uma exceção.
-
finalmente − O bloco finally é usado para executar um determinado conjunto de instruções, seja uma exceção lançada ou não. Por exemplo, se você abrir um arquivo, ele deverá ser fechado independentemente de uma exceção ser levantada ou não.
-
lançar − Um programa lança uma exceção quando aparece um problema. Isso é feito usando uma palavra-chave throw.
Sintaxe
Assumindo que um bloco gera uma exceção, um método captura uma exceção usando uma combinação das palavras-chave try e catch. Um bloco try/catch é colocado em torno do código que pode gerar uma exceção. O código dentro de um bloco try/catch é chamado de código protegido, e a sintaxe para usar try/catch se parece com a seguinte −
try { // statements causing exception } catch( ExceptionName e1 ) { // error handling code } catch( ExceptionName e2 ) { // error handling code } catch( ExceptionName eN ) { // error handling code } finally { // statements to be executed }
Você pode listar várias instruções catch para capturar diferentes tipos de exceções caso seu bloco try gere mais de uma exceção em diferentes situações.
Classes de exceção em C#
As exceções do C# são representadas por classes. As classes de exceção em C# são derivadas principalmente direta ou indiretamente do System.Exception classe. Algumas das classes de exceção derivadas da classe System.Exception são a System.ApplicationException e System.SystemException Aulas.
A System.ApplicationException classe suporta exceções geradas por programas aplicativos. Portanto, as exceções definidas pelos programadores devem derivar dessa classe.
A System.SystemException class é a classe base para todas as exceções de sistema predefinidas.
A tabela a seguir fornece algumas das classes de exceção predefinidas derivadas da classe Sytem.SystemException −
Nº Sr. | Classe e descrição de exceção |
---|---|
1 | System.IO.IOException Lida com erros de E/S. |
2 | System.IndexOutOfRangeException Manipula erros gerados quando um método se refere a um índice de matriz fora do intervalo. |
3 | System.ArrayTypeMismatchException Lida com erros gerados quando o tipo é incompatível com o tipo de matriz. |
4 | System.NullReferenceException Lida com erros gerados ao referenciar um objeto nulo. |
5 | System.DivideByZeroException Lida com erros gerados pela divisão de um dividendo por zero. |
6 | System.InvalidCastException Lida com erros gerados durante a conversão de tipos. |
7 | System.OutOfMemoryException Lida com erros gerados por memória livre insuficiente. |
8 | System.StackOverflowException Lida com erros gerados por estouro de pilha. |
Como lidar com exceções
C# fornece uma solução estruturada para o tratamento de exceções na forma de blocos try e catch. Usando esses blocos, as instruções do programa principal são separadas das instruções de tratamento de erros.
Esses blocos de tratamento de erros são implementados usando o try , pegar , e finalmente palavras-chave. A seguir está um exemplo de lançamento de uma exceção quando ocorre a divisão por zero condição -
Demonstração ao vivo
using System; namespace ErrorHandlingApplication { class DivNumbers { int result; DivNumbers() { result = 0; } public void division(int num1, int num2) { try { result = num1 / num2; } catch (DivideByZeroException e) { Console.WriteLine("Exception caught: {0}", e); } finally { Console.WriteLine("Result: {0}", result); } } static void Main(string[] args) { DivNumbers d = new DivNumbers(); d.division(25, 0); Console.ReadKey(); } } }
Quando o código acima é compilado e executado, ele produz o seguinte resultado -
Exception caught: System.DivideByZeroException: Attempted to divide by zero. at ... Result: 0
Criando exceções definidas pelo usuário
Você também pode definir sua própria exceção. As classes de exceção definidas pelo usuário são derivadas da Exception classe. O exemplo a seguir demonstra isso -
Demonstração ao vivo
using System; namespace UserDefinedException { class TestTemperature { static void Main(string[] args) { Temperature temp = new Temperature(); try { temp.showTemp(); } catch(TempIsZeroException e) { Console.WriteLine("TempIsZeroException: {0}", e.Message); } Console.ReadKey(); } } } public class TempIsZeroException: Exception { public TempIsZeroException(string message): base(message) { } } public class Temperature { int temperature = 0; public void showTemp() { if(temperature == 0) { throw (new TempIsZeroException("Zero Temperature found")); } else { Console.WriteLine("Temperature: {0}", temperature); } } }
Quando o código acima é compilado e executado, ele produz o seguinte resultado -
TempIsZeroException: Zero Temperature found
Atirar objetos
Você pode lançar um objeto se ele for derivado direta ou indiretamente do System.Exception classe. Você pode usar uma instrução throw no bloco catch para lançar o objeto presente como −
Catch(Exception e) { ... Throw e }
Linguagem C
- C# usando
- C Manipulação de Arquivos
- Manipulação de Exceções do Python Usando a instrução try, except e finally
- Manipulação de Exceções Java
- Manipulação de Exceções C++:Try, Catch, Throw Exemplo
- Manipulação de exceção do Python:tente, pegue, finalmente e aumente [Exemplo]
- Manipulação de sinal C++
- Java 9 - Sistema de Módulos
- PLC vs DCS
- Sistema modular de manuseio de paletes permite produção flexível