¿Cuáles son algunas de las mejores prácticas para crear mi propia excepción personalizada?


En un seguimiento de una pregunta anterior con respecto a las excepciones, ¿cuáles son las mejores prácticas para crear una excepción personalizada en. NET?

Más específicamente debe heredar del Sistema.Excepción, Sistema.ApplicationException o alguna otra excepción de base?

Author: Community, 2008-09-10

5 answers

Heredar de System.Exception. System.ApplicationException es inútil y las directrices de diseño dicen " No lanzar o derivar de System.ApplicationException."

Véase http://blogs.msdn.com/kcwalina/archive/2006/06/23/644822.aspx

 16
Author: Mark Cidade,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-17 13:09:26

En el IDE de C#, escriba 'exception' y presione TAB. Esto se expandirá para comenzar a escribir un nuevo tipo de excepción. Hay comentarios con enlaces a algunas discusiones sobre prácticas de excepción.

Personalmente, soy un gran fan de crear muchas clases pequeñas, que se extiende a los tipos de excepción. Por ejemplo, al escribir la clase Foo, puedo elegir entre:

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

Donde

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

Y

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

I prefiero la 3ª opción, porque lo veo como una solución OO.

 26
Author: Jay Bazuzi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-10 18:27:35

Hay un fragmento de código para ello. Usa eso. Además, revise su análisis de código después; el fragmento omite uno de los constructores que debe implementar.

 5
Author: Will,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-10 17:58:48

Creo que lo más importante a recordar cuando se trata de excepciones en cualquier nivel (hacer costumbre, lanzar, atrapar) es que las excepciones son solo para condiciones excepcionales.

 1
Author: Thomas Owens,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-10 17:56:36

La excepción base de la que heredan todas las demás excepciones es System.Excepción, y eso es lo que debe heredar, a menos que, por supuesto, tenga un uso para cosas como, por ejemplo, mensajes predeterminados de una excepción más específica.

 1
Author: Jon Limjap,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-10 17:57:31