Vous êtes sur la page 1sur 23

 Gérer les Exceptions

 Lever les Exceptions


 Qu’est-ce qu’est une exception?
 Utiliser un bloc Try/Catch
 Propriétés de la classe Exception
 Utiliser un bloc Finally
 Using les mots-clés Checked et Unchecked
 Démonstration: Lever une exception dans Visual
Studio
Une exception est une indication d’erreur ou de
condition exceptionnelle, comme une tentative
d’ouverture d’un fichier qui n’existe pas.

Lorsqu’une méthode déclenche une exception, le


code appelant doit être préparé à détecter et
gérer l’exception.
ArgumentException
Levée lorsqu'une fonction est appelée avec un
argument inapproprié. Cela indique généralement
un bogue du programme.
ArgumentNullException
Est levée lorsqu'un argument de fonction est null.
ArgumentOutOfRangeException
Est levée lorsqu'un argument (habituellement
numérique) est trop grand ou trop petit. Exemple
de passage d'un nombre négatif dans une fonction
qui accepte uniquement des valeurs positives.
InvalidOperationException
Levée lorsque l'état d'un objet ne convient pas
pour une méthode à exécuter, indépendamment de
toute valeur de l'argument particulier. Les
exemples incluent la lecture d'un fichier non
ouvert ou obtenir l'élément suivant d'un
énumérateur lorsque la liste sous-jacente a été
modifiée.
NotSupportedException
Levée pour indiquer qu'une fonctionnalité
particulière n'est pas prise en charge. Un
exemple, appeller la méthode Add sur une
collection pour laquelle la propriété IsReadOnly a
la valeur "true".
NotImplementedException
Levée pour indiquer qu'une fonction n'est pas
encore implémentée.
ObjectDisposedException
Levée lorsque l'objet sur lequel la fonction est
appelée a été supprimé.
Si le code appelant ne peut pas gérer l’exception,
l’exception est automatiquement propagée au code qui a
appelé le code appelant

L’exception est propagée jusqu’à ce qu’une section de code


la gère.

Si aucune section de code ne la gère, le runtime va signaler


une exception non prise en charge et l’application va
abandonner.
Instructions pouvant
causer une exception
try
{
// bloc Try. Instructions à exécuter si
} DivideByZeroException
catch (DivideByZeroException ex) survient
{
//bloc Try, peut accéder à l’exception DivideByZeroException
// ex.
} Instructions à exécuter pour
catch (Exception ex) toute autre exception
{
// bloc Catch, peut accéder à l’exception ex.
}

Il est possible d’imbriquer des blocs try/catch

Les types d’Exception peuvent être hiérarchisés


Propriétés courantes sont: TargetSite

Message InnerException

Source HelpLink

StackTrace Data

try
{
// bloc Try.
}
catch (DivideByZeroException ex) Obtenir la
{ description associée
Console.WriteLine(ex.Message); à l’exception
}
Vous avez un bloc catch qui contient
une certaine logique pour écrire les
détails des exceptions dans un fichier
log. Le bloc catch intercepte toutes
sortes d’exceptions. Quels membres de
la classe exception allez-vous utiliser
pour obtenir la description et la source
de l’erreur ?
Permet de libérer les ressources et d’écrire du code qui
sera toujours exécuté, qu’une exception ait lieu ou non

try
{
OpenFile("Fichier"); // Ouvrir un fichier
WriteToFile(...); // Écrire données dans le fichier
}
catch (IOException ex)
{
MessageBox.Show(ex.Message);
}
finally Instructions qui
{ seront toujours
CloseFile("Fichier ");//Fermer le fichierexécutées
}
Quelle est la différence entre un bloc
catch et un bloc finally ?
Les applications C# s’ exécutent avec le contrôle de dépassement de
capacité sur les entiers activé par défaut. On peut modifier cette
option de projet.

On peut contrôler le dépassement de capacité pour des portions


spécifiques de code en écrivant checked et unchecked .

checked unchecked
{ {
int x = ...; int x = ...;
int y = ...; Blocs checked et int y = ...;
int z = ...; unchecked int z = ...;
... ...
} }

... Operateurs ...


int z = checked(x* y); checked et int z = unchecked(x* y);
... unchecked ...
Dans quel cas utiliser le mot-clé
checked ?
Dans la démonstration, nous allons :
• Ouvrir une application existante et examiner son code

• Exécuter l’application et suivre comment elle gère


couramment les exceptions
• Modifier la configuration des exceptions dans Visual Studio
pour qu’elle lève toujours les exceptions
• Ré-exécuter l’application et observer le changement de
comportement
 Créer un Objet Exception
 Lever une Exception
 Meilleures Pratiques pour gérer et
lever les exceptions
System.Exception

System.SystemException

System.FormatException

System.ArgumentException

System.NotSupportedException

+ beaucoup d’autres

catch (Exception e)
{
FormatException ex =
new FormatException(" Format Argument Incorrect", e);
}
Mot-clé throw

throw [exception object];

déclaration objet Exception


Exemple

public int RacineCarreeEntiere(int operande)


{
double racine= Math.Sqrt(operande);
if (racine != (int)racine)
{
throw new ArgumentException("Pas de Racine Carrée Entière.");
}
return (int)racine;
}
Vous ajoutez plusieurs méthodes à
votre application. Jusqu’ici vous n’avez
mis que la signature de ces méthodes.
Qu’est-ce que vous pouvez ajouter
d’autre dans chaque méthode pour
indiquer qu’elle n’est pas fonctionnelle?
"Erreur rencontrée.
Si le problème persiste,
Contacter un
administrateur…"

"Une connection à la
base de données ucadDB
avec mot de passe
‘XYZB12345' a échoué…"
• Exercice 1: Rendre une méthode sure

• Exercice 2: Détecter une condition


exceptionnelle
• Exercice 3: Vérifier les dépassements
de capacité numériques
Questions de Révision
• Quelle construction est utilisée pour rendre
lse appels de méthode surs ?
• Quelle attribut est nécessaire pour décorer
la méthode test en sorte qu’elle attende une
exception?
• Quel mot-clé est utilisé pour demander au
compilateur ou au runtime de vérifier les
dépassements de capacité ?