SUPINFO International University

SUPINFO Institute of Information Technology
Laboratoire Microsoft




Tous les Articles du Laboratoire Microsoft

Présentation du C# (suite et fin)
Accueil > Articles > Développement
Auteurs 
Franklin-jaurès KONGBANG

Etudiant


 Tous les articles de cet auteur

3/5

Assez Bien


181926
141/429

Les exceptions

C’est une alerte donnée par la CLR (Common Language Runtime) lors de l’exécution d’un programme en cas d’erreur. Le développeur a donc la possibilité de capturer cette alerte afin de pouvoir traiter l’erreur.

La gestion d’exception nécessite deux méthodes indispensables : try et catch.

Le Bloc de code susceptible de générer une erreur doit être contenu dans la méthode try. Le code exécuté en cas d’erreur sera inclus dans la méthode catch. On dira alors qu’une exception est levée.

En premier lieu, nous allons faire un programme qui génère une exception. Le programme consistera à faire une division simple des entiers.

 

using System;

namespace excep

{

      class Class1

      {

            [STAThread]

            static void Main(string[] args)

            {

                  int a=20;

                  int b=4;

                  int c=0;

                  Console.WriteLine("a = {0} , b = {1}, c = {2}",a,b,c);

                  Console.WriteLine("division a/b <=>  {0}/{1} = {2}",a,b,a/b);

                  Console.WriteLine("division a/c <=> {0}/{1} = {2}",a,c,a/c);

                  Console.ReadLine();

            }

      }

}  

 

 

En lançant le programme on obtient un message d’alerte.

 

C’est une exception. Toutes les exceptions héritent de la classe System.Exception. Les objets de cette dernière contiennent des propriétés donnant des indications sur l’erreur. Comme par exemple dans notre cas, l’objet exception nous renseigne sur le type d’exception (ici DivideByZeroException) et sur l’erreur qui est «Tentative de division par zéro ».

Bien qu’il ait exception, le programme est tout de même exécuté jusqu’à la ligne qui génère l’exception (ici division de a/c).

 

 

Il pourrait arriver qu’on ait envie qu’un bloc de code soit exécuté systématiquement, qu’une exception soit levée ou non. Dans ce cas on utilisera la méthode finally et on y inclura le bloc de code en question.  

Levons maintenant notre exception de telle sorte qu’il soit affiché « Erreur ! » au lieu du message d’alerte de tout à l’heure.

using System;

namespace excep

{

      class Class1

      {

            [STAThread]

            static void Main(string[] args)

            {

                  int a=20;

                  int b=4;

                  int c=0;

try

                  {

                        Console.WriteLine("a = {0} , b = {1}, c = {2}",a,b,c);

                        Console.WriteLine("division a/b <=>  {0}/{1} = {2}",a,b,a/b);

                        Console.WriteLine("division a/c <=> {0}/{1} = {2}",a,c,a/c);

                  }

                  catch

                  {

                        Console.WriteLine("Erreur!");

                  }

                  Console.ReadLine();

            }

      }

}  

 

 

 

 

La méthode try a bien trouvé l’erreur (ici division par zéro) dans le bloc de code qu’on lui a attribué, et la méthode catch nous a permis de lever l’exception.

Il existe plusieurs types d’exceptions, les plus fréquents étant la division par zéro, index du tableau hors de la limite du tableau. En général le CLR nous renseigne sur le type de l’exception survenu. On pourra donc récupérer ce type pour pouvoir y travailler avec dans la méthode catch.

Le programme suivant capturera l’exception en fonction de son type et mettra à l’épreuve la méthode finally.

using System;

namespace excep

{

      class Class1

      {

            [STAThread]

            static void Main(string[] args)

            {

                  int a=20;

                  int b=4;

                  int c=0;

                  try

                  {

                        Console.WriteLine("a = {0} , b = {1}, c = {2}",a,b,c);

                        Console.WriteLine("division a/b <=>  {0}/{1} = {2}",a,b,a/b);

                        Console.WriteLine("division a/c <=> {0}/{1} = {2}",a,c,a/c);

                  }

                  catch(DivideByZeroException toto)

                  {

                        Console.WriteLine("Erreur! : {0}",toto.Message);

                  }

                  catch(IndexOutOfRangeException toto)

                  {

                        Console.WriteLine("Erreur! : {0}",toto.Message);

                  }

                  catch(Exception toto)    //pour erreurs non spécifiées

                  {

                        Console.WriteLine("Erreur!:{0}",toto.Message);

                  }

                  finally

                  {

                        Console.WriteLine("je suis incontournable!!!");

                  }

                  Console.ReadLine();

            }

      }

}  

 

 

 

 

Pour prévenir toutes les erreurs qui n’auront pas été spécifiquement traitées, on termine le traitement d’erreur par un catch de Exception.          Le bloc finally est exécuté malgré que l’exception soit levée. 

   


Sommaire
1. Les collections
2. les structures
3. les classes
4. Les propriétés
5. Les exceptions
6. Héritage et polymorphisme
7. Les interfaces
8. Surcharge d’opérateurs
9. La délégation
10. Les évènements



En Savoir Plus 
Evaluez cet article 


Pour afficher ou poster un commentaire, cliquez sur ce lien : Forum-Microsoft



Retrouvez ci-dessous les autres sections du Laboratoire Microsoft