Partager via


Exceptions et gestion des exceptions (Guide de programmation C#)

Les fonctionnalités de gestion des exceptions du langage C# vous aident à gérer les situations inattendues ou exceptionnelles qui surviennent pendant l'exécution d'un programme. La gestion des exceptions utilise les mots clés try, catch et finally pour tenter des actions susceptibles de ne pas réussir, pour gérer les défaillances lorsque vous pensez que c'est justifié et pour nettoyer les ressources après. Les exceptions peuvent être générées par le Common Language Runtime (CLR), par le .NET Framework ou des bibliothèques tierces ou par le code d'application. Les exceptions sont créées à l'aide du mot clé throw.

Dans de nombreux cas, une exception peut être levée non par une méthode que votre code a appelée directement, mais par une autre méthode plus bas dans la pile des appels. Lorsque cela arrive, le CLR déroule la pile à la recherche d'une méthode comportant un bloc catch pour le type d'exception spécifique et il exécute le premier bloc catch qu'il trouve. S'il ne trouve aucun bloc catch approprié dans la pile des appels, il arrête le processus et affiche un message destiné à l'utilisateur.

Dans cet exemple, une méthode teste une division par zéro et intercepte l'erreur. Sans la gestion des exceptions, ce programme se terminerait sur une erreur L'exception DivideByZeroException n'a pas été gérée.

class ExceptionTest
{
    static double SafeDivision(double x, double y)
    {
        if (y == 0)
            throw new System.DivideByZeroException();
        return x / y;
    }
    static void Main()
    {
        // Input for test purposes. Change the values to see 
        // exception handling behavior. 
        double a = 98, b = 0;
        double result = 0;

        try
        {
            result = SafeDivision(a, b);
            Console.WriteLine("{0} divided by {1} = {2}", a, b, result);
        }
        catch (DivideByZeroException e)
        {
            Console.WriteLine("Attempted divide by zero.");
        }
    }
}

Vue d'ensemble des exceptions

Les exceptions ont les propriétés suivantes :

  • Les exceptions sont des types qui dérivent en définitive tous de System.Exception.

  • Délimitez toute instruction susceptible de lever des exceptions par un bloc try.

  • Lorsqu'une exception se produit dans le bloc try, le flux de contrôle est immédiatement transmis au premier gestionnaire d'exceptions associé présent dans la pile des appels. En C#, le mot clé catch est utilisé pour définir un gestionnaire d'exceptions.

  • Si aucun gestionnaire d'exceptions pour une exception donnée n'est présent, le programme cesse de s'exécuter avec un message d'erreur.

  • Interceptez uniquement les exceptions que vous pouvez gérer tout en laissant l'application dans un état connu. Si vous interceptez une System.Exception, levez-la de nouveau à l'aide du mot clé throw à la fin du bloc catch.

  • Si un bloc catch définit une variable d'exception, vous pouvez l'utiliser pour obtenir plus d'informations sur le type d'exception qui s'est produit.

  • Les exceptions peuvent être générées explicitement par un programme à l'aide du mot clé throw.

  • Les objets Exception contiennent des informations détaillées à propos de l'erreur, telles que l'état de la pile des appels et une description du texte de l'erreur.

  • Le code figurant dans les blocs finally est exécuté même si une exception est levée. Utilisez un bloc finally pour libérer des ressources, notamment pour fermer tous les flux ou fichiers qui ont été ouverts dans le bloc try.

  • Les exceptions managées dans le .NET Framework sont implémentées par dessus le mécanisme de gestion structurée des exceptions Win32. Pour plus d'informations, consultez Gestion structurée des exceptions (C/C++) et A Crash Course on the Depths of Win32 Structured Exception Handling.

Rubriques connexes

Consultez les rubriques suivantes pour plus d'informations sur les exceptions et la gestion des exceptions :

Spécification du langage C#

Pour plus d'informations, voir la Spécification du langage C#. La spécification du langage est la source de référence pour la syntaxe C# et son utilisation.

Voir aussi

Référence

Mots clés C#

throw (référence C#)

try-catch (référence C#)

try-finally (référence C#)

try-catch-finally (référence C#)

SystemException

Concepts

Guide de programmation C#

Hiérarchie des exceptions

Autres ressources

Gestion et levée des exceptions

Écriture de code fiable .NET

Minidumps pour des exceptions spécifiques