Partager via


Hiérarchie des exceptions

Mise à jour : novembre 2007

Il existe deux types d'exception : les exceptions générées par un programme en exécution et les exceptions générées par le Common Language Runtime. De plus, il existe une hiérarchie des exceptions pouvant être levées soit par une application soit par le runtime.

La classe Exception est la classe de base des exceptions. Plusieurs classes d'exceptions héritent directement d'Exception, parmi lesquelles ApplicationException et SystemException. Ces deux classes forment la base de la quasi-totalité des exceptions runtime.

La plupart des exceptions qui dérivent directement de la classe Exception n'ajoutent aucune fonctionnalité à la classe Exception. Par exemple, la classe InvalidCastException a la hiérarchie suivante :

Object    Exception       SystemException          InvalidCastException

Le runtime lève la classe dérivée appropriée de SystemException quand des erreurs se produisent. Ces erreurs sont liées à des vérifications à l'exécution qui ont échoué (erreurs dues à un tableau hors des limites, par exemple), et peuvent se produire pendant l'exécution de n'importe quelle méthode. Si vous développez une application qui crée de nouvelles exceptions, vous devez dériver ces exceptions de la classe Exception. Il n'est pas recommandé d'intercepter une exception SystemException, et la levée de SystemException dans votre application ne constitue pas une bonne pratique de programmation.

Parmi les exceptions les plus graves (qui sont levées par le runtime ou dans des conditions qui ne permettent aucune récupération) figurent ExecutionEngineException, StackOverflowException et OutOfMemoryException.

Les exceptions d'interopérabilité dérivent de SystemException et sont encore plus étendues par ExternalException. Par exemple, COMException est l'exception qui est levée pendant les opérations COM Interop et qui dérive d'ExternalException. Win32Exception et SEHException dérivent également d'ExternalException.

Hiérarchie des exceptions runtime

Le runtime possède un jeu de base d'exceptions dérivant de SystemException qu'il lève lorsqu'il exécute des instructions individuelles. Le tableau suivant énumère de manière hiérarchique les exceptions standard fournies par le runtime et les conditions dans lesquelles vous devez créer une classe dérivée.

Type d'exception

Type de base

Description

Exemple

Exception

Object

Classe de base pour toutes les exceptions.

Aucun (utilisez une classe dérivée de cette exception).

SystemException

Exception

Classe de base pour toutes les erreurs générées par le runtime.

Aucun (utilisez une classe dérivée de cette exception).

IndexOutOfRangeException

SystemException

Levée par le runtime uniquement en cas de mauvaise indexation du tableau.

Indexation d'un tableau en dehors de sa plage valide :

arr[arr.Length+1]

NullReferenceException

SystemException

Levée par le runtime uniquement si un objet null est référencé.

object o = null;

o.ToString();

AccessViolationException

SystemException

Levée par le runtime uniquement lors d'un accès à une mémoire non valide.

Se produit lors de l'interaction avec du code non managé ou du code managé unsafe, si un pointeur non valide est utilisé.

InvalidOperationException

SystemException

Levée par les méthodes en cas d'état non valide.

Appel à Enumerator.GetNext() après avoir supprimé Item de la collection sous-jacente.

ArgumentException

SystemException

Classe de base pour toutes les exceptions d'argument.

Aucun (utilisez une classe dérivée de cette exception).

ArgumentNullException

ArgumentException

Levée par les méthodes qui n'acceptent pas la valeur null pour un argument.

String s = null;

"Calculate".IndexOf (s);

ArgumentOutOfRangeException

ArgumentException

Levée par les méthodes vérifiant que les arguments sont dans une plage donnée.

String s = "string";

s.Chars[9];

ExternalException

SystemException

Classe de base de toutes les exceptions qui se produisent ou qui sont destinées à des environnements extérieurs au runtime.

Aucun (utilisez une classe dérivée de cette exception).

COMException

ExternalException

Exception qui encapsule les informations HRESULT COM.

Utilisé dans COM Interop.

SEHException

ExternalException

Exception encapsulant les informations de la gestion structurée des exceptions sous Win32.

Utilisé dans l'interopérabilité du code non managé.

Voir aussi

Concepts

Classe et propriétés d'exception

Vue d'ensemble des exceptions

Méthodes conseillées pour la gestion des exceptions

Autres ressources

Notions de base de la gestion des exceptions

Gestion et levée des exceptions