Jerarquía de excepciones

Actualización: noviembre 2007

Hay dos tipos de excepciones: las generadas por un programa en ejecución y las generadas por Common Language Runtime. Además, hay una jerarquía de excepciones que una aplicación o el motor tiempo de ejecución pueden producir.

Exception es la clase base de las excepciones. Varias clases de excepciones derivan directamente de Exception, entre ellas ApplicationException y SystemException. Estas dos clases forman la base de casi todas las excepciones del motor en tiempo de ejecución.

La mayoría de las excepciones que derivan directamente de Exception no agregan funcionalidad a la clase Exception. Por ejemplo, la jerarquía de la clase InvalidCastException es:

Object    Exception       SystemException          InvalidCastException

El motor en tiempo de ejecución produce la clase derivada adecuada de SystemException cuando se producen errores. Estos errores se producen debido a comprobaciones del motor en tiempo de ejecución incorrectas, como errores de matriz fuera de límite, y pueden aparecer durante la ejecución de cualquier método. Si va a diseñar una aplicación que crea excepciones nuevas, derive esas excepciones de la clase Exception. No es recomendable detectar una SystemException, ni tampoco es una costumbre de programación correcta el hecho de producir una SystemException en la aplicación.

Entre las excepciones más graves, que son las que produce el motor en tiempo de ejecución o se producen en condiciones irrecuperables, están ExecutionEngineException, StackOverflowException y OutOfMemoryException.

Las excepciones de interoperación derivan de SystemException y ExternalException las extiende más. Por ejemplo, COMException es la excepción que se produce durante las operaciones de interoperabilidad COM y deriva de ExternalException. Win32Exception y SEHException también deriva de ExternalException.

Jerarquía de excepciones del motor en tiempo de ejecución

El motor en tiempo de ejecución tiene un conjunto base de excepciones que derivan de SystemException, que produce cuando está ejecutando instrucciones individuales. En la tabla siguiente se muestran jerárquicamente las excepciones estándar que proporciona el motor en tiempo de ejecución y las condiciones en que se debe crear una clase derivada.

Tipo de excepción

Tipo base

Descripción

Ejemplo

Exception

Object

Clase base de todas las excepciones.

Ninguno (utilice una clase derivada de esta excepción).

SystemException

Exception

Clase base de todos los errores que genera el motor en tiempo de ejecución.

Ninguno (utilice una clase derivada de esta excepción).

IndexOutOfRangeException

SystemException

La produce el motor en tiempo de ejecución sólo cuando no se indiza correctamente una matriz.

Indización de una matriz fuera de su intervalo válido:

arr[arr.Length+1]

NullReferenceException

SystemException

La produce el motor en tiempo de ejecución sólo cuando se hace referencia a un objeto nulo.

object o = null;

o.ToString();

AccessViolationException

SystemException

La produce el motor en tiempo de ejecución cuando se obtiene acceso a una memoria no válida.

Aparece al interoperar con código no administrado o con código administrado no seguro, y cuando se utiliza un puntero no válido.

InvalidOperationException

SystemException

La producen los métodos que se encuentran en un estado no válido.

Llamar a Enumerator.GetNext() después de eliminar un Item de la colección subyacente.

ArgumentException

SystemException

Clase base de todas las excepciones de argumento.

Ninguno (utilice una clase derivada de esta excepción).

ArgumentNullException

ArgumentException

La producen los métodos que no permiten que un argumento sea nulo.

String s = null;

"Calculate".IndexOf (s);

ArgumentOutOfRangeException

ArgumentException

La producen los métodos que comprueban que los argumentos están en un intervalo dado.

String s = "string";

s.Chars[9];

ExternalException

SystemException

Clase base de las excepciones que se producen a o van dirigidas a entornos fuera del motor en tiempo de ejecución.

Ninguno (utilice una clase derivada de esta excepción).

ComException

ExternalException

Excepción que encapsula información de HRESULT de COM.

Se usa en la interoperabilidad COM.

SEHException

ExternalException

Excepción que encapsula información de control de excepciones estructurada de Win32.

Se usa en la interoperabilidad de código no administrado.

Vea también

Conceptos

Clase Exception y propiedades

Información general sobre excepciones

Procedimientos recomendados para controlar excepciones

Otros recursos

Fundamentos del control de excepciones

Controlar y generar excepciones