Quais são algumas práticas recomendadas para criar minha própria exceção personalizada?

StackOverflow https://stackoverflow.com/questions/54851

  •  09-06-2019
  •  | 
  •  

Pergunta

No seguimento de um pergunta anterior em relação às exceções, quais são as práticas recomendadas para criar uma exceção personalizada no .NET?

Mais especificamente, você deve herdar de System.Exception, System.ApplicationException ou alguma outra exceção básica?

Foi útil?

Solução

Herdar de System.Exception. System.ApplicationException é inútil e as diretrizes de design dizem "Não lançar ou derivar de System.ApplicationException."

Ver http://blogs.msdn.com/kcwalina/archive/2006/06/23/644822.aspx

Outras dicas

No IDE C#, digite 'exception' e pressione TAB.Isso será expandido para você começar a escrever um novo tipo de exceção.Existem comentários com links para algumas discussões sobre práticas de exceção.

Pessoalmente, sou um grande fã de criar muitas classes pequenas, o que se estende aos tipos de exceção.Por exemplo, ao escrever a classe Foo, posso escolher entre:

  1. throw new Exception("Bar happened in Foo");
  2. throw new FooException("Bar happened");
  3. throw new FooBarException();

onde

class FooException : Exception 
{
    public FooException(string message) ... 
}

e

class FooBarException : FooException 
{
    public FooBarException() 
        : base ("Bar happened") 
    {
    }
}

Prefiro a 3ª opção, pois a vejo como uma solução OO.

Existe um trecho de código para isso.Use isso.Além disso, verifique sua análise de código posteriormente;o trecho deixa de fora um dos construtores que você deve implementar.

Acho que a coisa mais importante a lembrar ao lidar com exceções em qualquer nível (fazer customização, lançar, capturar) é que as exceções são apenas para condições excepcionais.

A exceção base de onde todas as outras exceções são herdadas é System.Exception, e é isso que você deve herdar, a menos, é claro, que você tenha um uso para coisas como, digamos, mensagens padrão de uma exceção mais específica.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top