Le Langage C# : Les Exceptions (cours 16)

0
Le Langage C#

Erreurs et exceptions

Une exception est un objet de la classe System.Exception ou une de ses sous-classes. Les mots-clés utilisés pour traiter les exceptions sont : throw, catch, et finally.

La gestion des exceptions requiert l’utilisation des mots-clés :

  • throw: Pour lancer ou relancer une exception.
  • try-catch: Pour capturer et traiter une exception.
  • try-finally: Pour libérer les ressources après le lancement de l’exception
    indépendamment de sa capture.
  • try-catch-finally: Pour capturer et traiter une exception et libérer les ressources

Lancer une exception

En cas d’erreur dans une méthode d’un programme (arguments invalides, …), on peut  lancer une exception en utilisant le mot clé throw.

La syntaxe est la suivante :

throw objet_exception;

objet_exception est une instance de la classe Exception ou de l’une de ses sous-classes.

Exemples d’exceptions 

  • InvalidCastException
  • OverFlowException
  • ArgumentNullException
  • ArithmeticException
  • DivideByZeroException

Attraper une exception

Pour capturer une exception, le code suspect est mis dans un bloc try :
try
{// Le code à protéger. }
Le gestionnaire de l’erreur est mis dans un bloc de capture:
catch [(declaration)] { // Le code du gestionnaire d’exception. }
Où declaration est la déclaration de l’objet exception (optionnel).

Exemple


try
{
int i=10;
int j=0;
int resultat=i/j;
}
catch ( Exception ex )
{
    console.writeLine("Impossible", ex);
}
finally
{
    Console.WriteLine(" Quel que soit le résultat, ceci est affiché");
}

Organisation des gestionnaires

Quand on utilise plus d’un bloc catch, il est important de capturer les exceptions spécifiques
avant les moins spécifiques. Si un gestionnaire adéquat n’existe pas dans la méthode actuelle, le moteur d’exécution cherche dans les autres méthodes.

Exemple

catch (ArithmeticException e) // premier gestionnaire

{ //...}

..

catch (Exception e) // dernier gestionnaire

{ // ...}

Instruction try-finally

L’utilisation du mot-clé finally permet d’introduire un code de nettoyage qui sera exécuté
dans tous les cas. Cela permet, par exemple de libérer des ressources.

try
{ // bloc-try }
finally
{ // bloc-finally }

Exceptions personnalisées

On peut créer une exception personnalisée en la déclarant comme dérivée de

ApplicationException.

Avantage : personnaliser le texte du gestionnaire pour expliquer l’erreur.

class MonExceptionPersonnalisee: ApplicationException

Un constructeur avec un string comme paramètre est utilisé pour envoyer le message à la

classe héritée:

MonExceptionPersonnalisee(string message): base(message)

{ }

Utilisation de StackTrace

StackTrace permet de garder la trace de l’exception au fur et à mesure qu’elle est capturée.

Filtres d’Exceptions (C#6)

C# 6 a introduit des filtres d’exceptions qui permettent de capturer une basée sur un type et une condition qui spécifiée dans une clause ‘when’.

Nameof (C#6)

Utilisé pour obtenir le nom d’une variable sous la forme d’un string. Ce qui peut être pratique dans la gestion des exceptions.

Exemple

if (x == null) throw new ArgumentNullException(nameof(x));

WriteLine(nameof(personne.Addresse.CodePostal)); // affiche "CodePostal"

LAISSER UN COMMENTAIRE

Entrez votre commentaire!
Entrez votre nom ici