Hiérarchie des exceptions
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 |
---|---|---|---|
Objet |
Classe de base pour toutes les exceptions. |
Aucun (utilisez une classe dérivée de cette exception). |
|
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). |
|
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] |
|
SystemException |
Levée par le runtime uniquement si un objet Null est référencé. |
object o = null; o.ToString(); |
|
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é. |
||
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. |
|
SystemException |
Classe de base pour toutes les exceptions d'argument. |
Aucun (utilisez une classe dérivée de cette exception). |
|
ArgumentException |
Levée par les méthodes qui n'acceptent pas la valeur Null pour un argument. |
String s = null; "Calculate".IndexOf (s); |
|
ArgumentException |
Levée par les méthodes vérifiant que les arguments sont dans une plage donnée. |
String s = "string"; s.Chars[9]; |
|
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). |
|
ExternalException |
Exception qui encapsule les informations HRESULT COM. |
Utilisé dans COM Interop. |
|
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
Meilleures pratiques pour la gestion des exceptions
Gestion et levée des exceptions