Hayadi's Blog

jeudi, janvier 25, 2007

Gestion des erreurs et des exceptions


Vos programmes doivent toujours être capable de traiter les erreurs et ceci afin d''en permettre une utilisation plus confortable.
Imaginez un programme ne traitant pas les erreurs : au moindre petit problème non prévu par le programmeur, le programme planterait, les données seraient très certainement perdues et vous n''auriez plus qu''à le relancer et à tout reprendre...Par exemple, un programme qui demande à l''utilisateur de choisir un fichier afin d''en modifier quelques données. Si l''utilisateur choisit un fichier protégé en écriture et que votre application n''est pas en mesure de gérer ce cas là... c''est le drame et il faut tout refaire...
Heureusement, C# offre des possibilités sophistiquées pour traiter ce type de problème : il s''agit du mécanisme de gestion des exceptions.

1 Capture et levée d''exceptions
1.1 Capture d''exceptions

Pour capturer des exceptions, il faut utiliser les blocs try, catch et finally dans un ordre bien précis :

try
{
// Code d''exécution normal
}
catch
{
// Gestion des erreurs
}
finally
{
// Nettoyage

}

Le bloc try contient le code qui effectue les opérations normales du programme, mais qui risque de rencontrer des erreurs plus ou moins innatendues.
Le bloc catch contient le code de traitement des erreurs, erreurs qui sont apparues lors de l''exécution du programme.
Le bloc finally contient le code qui nettoie les ressources ou que vous voulez impérativement exécuter après le bloc try ou catch.Ce bloc est exécuté qu''une exceptions soit levée ou pas !Il est interdit d''utiliser l''instruction return dans un bloc finally : le compilateur signale une erreur.
Le schéma de fonctionnement est le suivant :
- le flux d''exécution entre dans le bloc try- s''il n''y a pas d''erreur, on passe directement à l''étape 4- en cas d''erreur, l''exécution se poursuit dans le bloc catch où les erreurs sont gérées- le bloc finally est exécuté

2.2 Levée d''exceptions

Alors comment cela fonctionne-t-il ? Comment le runtime sait-il qu''il doit aller dans un bloc catch (ou pas) en cas d''erreur ?
Lorsqu''une erreur est détectée, le code lève une exception :throw new Exception();
Et c''est à ce moment là que l''exécution normale du bloc try s''arrête pour passer dans le bloc catch approprié :catch (Exception e) { }

2.3 Quelques classes d''exceptions

Le Framework offre beaucoup de classes gérant les exceptions dont :
- System.Exception
- System.SystemException
- System.ArgumentException
- System.ArgumentNullException
- System.OutOfRangeException
- System.IO.FileNotFoundException
- System.ApplicationException

Les classes d''exceptions sont des objets : la classe System.Exception hérite de la classe System.Object et toutes les autres classes d''exceptions héritent directement ou indirectement de la classe System.Exception.Par exemple, la classe ArgumentNullException hérite de ArgumentException qui hérite elle-même de SystemException qui (enfin) hérite de la classe de base Exception.
La classe Exception étant une classe de base, celle-ci traite toutes les exceptions possibles.
Lorsque votre application s''exécute avec en arrière plan le runtime .NET, votre fonction Main est en réalité imbriqué dans un gros bloc try (créé par le runtime) qui prévoit la levée d''une exception (Exception) : cela évite ainsi le fameux crash de l''application évoqué dans l''introcdution.
La classe ApplicationException est une classe héritant de la classe Exception et servira à créer vos propres classes d''exceptions. Vous verrez plus loin comment faire.
Dans le schéma suivant, toutes les classes appartiennent à l''espace de nom System, excepté IOException et ses dérivées qui se trouvent dans System.IO...




lundi, janvier 08, 2007

WDP (Web Deployement Project) sous VS 2005

je vous recommande dans ce sens l'article suivant parue sur le TechheadBrorthers : http://www.techheadbrothers.com/Articles.aspx?Id=d0db77ab-1f65-42f8-bf8d-0ce9f4a877ec
Un trés bon article qui illustre le mode d'utilisation du WDP sous VS 2005

Bonne utilisation !