O bloco try-catch não deve ser codificado em todos os métodos de uma aplicação. Esse
bloco deve ficar em pontos centrais para evitar excessos.
Vamos utilizar um exemplo: uma aplicação Console possui um método principal de entrada
Main. Assim, codificamos nossas classes e seus métodos que são invocados pela Main onde
devemos centralizar a captura e tratamento de erros, log e exibição de mensagem amigável ao usuário,
usando o bloco try-catch-finally:
Exemplo 7
using System;
public class Classe1
{
public Classe1(){}
public void metodo1()
{
//pode ocorrer uma exceção
Console.WriteLine("metodo1");
}
}
public class Classe2
{
public Classe1 cls1;
public Classe2(Classe1 cls)
{
cls1 = cls;
}
public void metodo2()
{
//pode ocorrer uma exceção
cls1.metodo1();
Console.WriteLine("metodo2");
}
}
public class Program
{
public static void Main()
{
Classe1 cls1 = new();
Classe2 cls2 = new(cls1);
try
{
cls2.metodo2();
}
catch(Exception)
{
//log do erro
//tratamento
//mensagem para o usuário
Console.WriteLine("ocorreu um erro.");
}
finally
{
//liberação de recursos usados
//Classe1, Classe2
}
}
}
Saída
metodo1
metodo2
Caso um método, semelhante a Main que centraliza o tratamento de erros, mas que seja utilizado
por outras classes. Esse método deve fazer o tratamento local nos blocos catch e
finally e relançar o erro para
o escopo em está sendo invocado.
O bloco try-catch não deve ser utilizar para tratamento de entrada de dados do usuário
como campos vazios, valores com formato inválidos, por exemplo, que são condições normais de
acontecer.
Exemplo 8: uso incorreto
using System;
public class Classe1
{
public int? codigo;
public string nome;
}
public class Program
{
public static void Main()
{
Classe1 cls = new();
try
{
//ENTRADA DO USUÁRIO OMITIDA
if(cls.codigo == null)
{
//lançar exceção: "codigo não preenchido!"
}
if(cls.nome == null)
{
//lançar exceção: "nome não preenchido!"
}
}
catch(Exception)
{
//tratamento
Console.WriteLine("ocorreu um erro.");
}
finally
{
//liberação de recursos usados
//Classe1
}
}
}
Não deixe blocos catch vazios, pois podem mascarar erros. Registre as informações do erro
em logs ou ou relance a exceção.