Si lanzar System.Exception
se considera tan malo, ¿por qué no se Exception
hizo abstract
en primer lugar?
De esa manera, no sería posible llamar:
throw new Exception("Error occurred.");
Esto exigiría el uso de excepciones derivadas para proporcionar más detalles sobre el error que ocurrió.
Por ejemplo, cuando quiero proporcionar una jerarquía de excepción personalizada para una biblioteca, generalmente declaro una clase base abstracta para mis excepciones:
public abstract class CustomExceptionBase : Exception
{
/* some stuff here */
}
Y luego alguna excepción derivada con un propósito más específico:
public class DerivedCustomException : CustomExceptionBase
{
/* some more specific stuff here */
}
Luego, al llamar a cualquier método de biblioteca, uno podría tener este bloque genérico try / catch para detectar directamente cualquier error proveniente de la biblioteca:
try
{
/* library calls here */
}
catch (CustomExceptionBase ex)
{
/* exception handling */
}
¿Es esta una buena practica?
¿Sería bueno si Exception
se hiciera abstracto?
EDITAR: Mi punto aquí es que incluso si se marca una clase de excepción abstract
, aún puede atraparla en un bloque general. Hacerlo abstracto es solo una forma de prohibir a los programadores lanzar una excepción "súper amplia". Por lo general, cuando lanza voluntariamente una excepción, debe saber de qué tipo es y por qué sucedió. Por lo tanto, hacer cumplir un tipo de excepción más específico.