Olá Samantha,
Tudo bem?
Nós usamos exceções como o nome diz para informar ao sistema que uma exceção ocorreu, isso é útil quando queremos parar a execução por algum motivo (ex. Parametro inválido, tentativa de acessar um objeto nulo, etc).
A palavra throw
é usada para lançar uma exceção, podendo ser usada em dois lugares:
- No bloco
catch
para propagar a exceção para a fila de chamada (para o método que chamou o método que lançou a exceção), na esperança que em algum momento ela seja tratada. - Em qualquer lugar do código onde seja necessário interromper a execução de um método por um determinado motivo, ( ex. Interromper o cadastro de uma pessoa no sistema se o CPF for inválido).
Embora você tenha visto lançamentos no método Main do Program.cs é importante que seja evitado o lançamento de exceções não tratadas no método main, visto que isso irá acarretar no encerramento da aplicação por um erro.
O que algumas aplicações fazem em alguns casos é capturar a exceção que chega até o main por algum motivo, construir um relatório de erros que pode ser enviado ao desenvolvedor no momento em que a aplicação tem esta exceção capturada no Main ou persistir a informação do erro em um arquivo para enviar ao desenvolvedor na próxima execução.
No meu dia a dia eu monto meus programas para lançarem exceções sempre que um método é usado de forma não planejada, a maioria das exceções que eu pessoalmente lanço normalmente estão relacionadas a Argumentos Inválidos ou erros em aplicações de terceiros (ex. Não receber a confirmação de recebimento da Nota Fiscal do servidor da prefeitura). e normalmente eu capturo estes erros para exibir uma mensagem ao usuário informando que a operação deu errado, o motivo pelo qual ela deu errado e o que o usuário pode fazer para conseguir alcançar seu objetivo.
Por exemplo, no caso do servidor da prefeitura eu tenho uma mensagem do tipo:
Não foi possível enviar a nota fiscal, o servidor da prefeitura não está respondendo no momento, por gentileza, tente realizar o envio mais tarde.
Nem sempre o uso é para retornar mensagens em interfaces. No mesmo sistema temos a função de gerar e enviar lotes de notas fiscais (que são enviadas individualmente), neste caso quando capturamos uma exceção de demora na resposta da prefeitura nós pausamos a execução por 30 segundos antes de tentar novamente, caso seja outro erro, por exemplo, um erro no valor da aliquota que tenha mudado e que não tenha sido atualizado a aplicação para a fila de envios e envia um e-mail para um profissional atualizar a aliquota.
De via de regra você provavelmente irá usar quando sentir a necessidade de parar ou evitar alguma execução, dependendo de onde ou o que estiver escrevendo talvez nem seja você que venha capturar a exceção, se estiver escrevendo um SDK para uma integração por exemplo, provavelmente quem irá capturar a exceção será o desenvolvedor que estiver usando seu SDK.