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
|
|
 |
Pour afficher ou poster un commentaire, cliquez sur ce lien : Forum-Microsoft
|
|