Maîtriser la gestion d'exceptions en C# : stratégies et bonnes pratiques
Une exception est un problème survenant pendant l'exécution. En C#, c'est une réponse à une circonstance exceptionnelle (ex: division par zéro).
Les exceptions permettent de transférer le contrôle d'une partie du programme à une autre. La gestion repose sur quatre mots-clés : try, catch, finally, throw.
- try : bloc de code surveillé pour exceptions. Suivi d'un ou plusieurs
catch. - catch : intercepte l'exception à l'endroit où on veut la traiter.
- finally : exécute un bloc d'instructions, exception levée ou non (ex: fermeture fichier).
- throw : lève une exception quand un problème survient.
Syntaxe
try
{
// code pouvant lever exception
}
catch (ExceptionType1 e1)
{
// traitement
}
catch (ExceptionType2 e2)
{
// traitement
}
finally
{
// code toujours exécuté
}
Plusieurs catch pour différents types d'exceptions.
Hiérarchie des classes d'exception
Toutes dérivent de System.Exception :
System.ApplicationException: base pour exceptions définies par l'utilisateurSystem.SystemException: base pour exceptions système prédéfinies
Exceptions système courantes
| Classe | Description |
|---|---|
IOException | Erreurs E/S |
IndexOutOfRangeException | Index tableau hors limites |
NullReferenceException | Référence null déréférencée |
DivideByZeroException | Division par zéro |
InvalidCastException | Erreur de cast |
OutOfMemoryException | Mémoire insuffisante |
StackOverflowException | Dépassement pile |
Gestion des exceptions
Séparation code principal / gestion erreurs via try/catch/finally.
Exemple : division par zéro
using System;
namespace GestionErreurs
{
class DivisionNombres
{
int resultat;
public DivisionNombres() { resultat = 0; }
public void Diviser(int num1, int num2)
{
try
{
resultat = num1 / num2;
}
catch (DivideByZeroException e)
{
Console.WriteLine("Exception interceptée : {0}", e);
}
finally
{
Console.WriteLine("Résultat : {0}", resultat);
}
}
static void Main(string[] args)
{
DivisionNombres d = new DivisionNombres();
d.Diviser(25, 0);
Console.ReadKey();
}
}
}
Résultat :
Exception interceptée : System.DivideByZeroException: Attempted to divide by zero.
Résultat : 0
Exceptions personnalisées
Dérivez de Exception :
public class TemperatureNulleException : Exception
{
public TemperatureNulleException(string message) : base(message) { }
}
public class Temperature
{
int temperature = 0;
public void AfficherTemp()
{
if (temperature == 0)
throw new TemperatureNulleException("Température nulle détectée");
else
Console.WriteLine("Température : {0}", temperature);
}
}
Relancer une exception
catch (Exception e)
{
// traitement...
throw; // relance l'exception originale
}
Langue C
- Maîtriser les directives using C# : Imports, alias et directives static
- Gestion des fichiers en C : Maîtriser les E/S avec fopen, fprintf, fread et fseek
- Maîtriser la gestion d'exceptions Python : try, except, else et finally expliqués
- Maîtriser la gestion d'exceptions Java : try, catch, finally, throw et throws expliqués
- Maîtriser la gestion d'exceptions en C++ : Exemples pratiques try, catch, throw
- Maîtriser la gestion d'exceptions Python : utiliser try, except, finally et raise efficacement
- Maîtriser la gestion des signaux en C++ : Interruption sécurisée et terminaison propre du programme
- Système de modules Java 9 : Création, link-time et images d'exécution personnalisées
- PLC vs DCS : choisir le bon système d'automatisation