
Les exceptions sont des erreurs qui surviennent lorsque quelque chose ne va pas lors de l'exécution.
Lorsqu'une exception non gérée se produit, elle entraîne en général la fermeture du programme par votre OS (système d'exploitation).
Lorsqu'une exception non gérée se produit, elle entraîne en général la fermeture du programme par votre OS (système d'exploitation).
Pensez à ceux qui utiliseront vos programmes (ne serait-ce qu'à vous-mêmes) ! Imaginez qu'à cause d'une erreur interne, le programme est fermé et manque de chance vous n'aviez pas sauvegardé : c'est pour le moins agaçant.
Gérer les exceptions permet de rendre votre programme plus stable et c'est un moyen simple pour éviter de se mettre des utilisateurs à dos.
Lancer une exception
Une exception est comme une alerte, le but est d'éviter une mauvaise opération. L'intérêt de lancer une exception est que du code ait été prévu pour la gérer, sinon votre programme s'arrête brutalement. Vous pouvez vous-mêmes lancer des exceptions, lorsque vous jugez que c'est nécessaire.
Pour ce faire, il suffit de faire
throw new nomDeLexception();
. Vous pouvez aussi passer des paramètres au constructeur comme l'IntelliSense vous le suggère, par exemple :
throw new NotImplementedException("Le code n'a pas encore écrit !");
Intercepter une exception
Lorsque vous voulez exécuter du code susceptible d'être source d'erreur, enfermez-le dans un bloc
Vous pouvez intercepter l'exception avec un (ou plusieurs) bloc(s)
Enfin, vous pouvez utiliser un bloc
try
.Vous pouvez intercepter l'exception avec un (ou plusieurs) bloc(s)
catch
.Enfin, vous pouvez utiliser un bloc
finally
pour effectuer systématiquement une opération après la tentative d'exécution.
try
{
Console.Write("Entrez un nombre : ");
int n = int.Parse(Console.ReadLine());
Console.WriteLine(
"100/nombre = {0}",
100/n);
}
catch (DivideByZeroException dbzEx)
{
Console.WriteLine("Erreur : division par zéro.");
}
catch (Exception ex)
{
Console.WriteLine(
"Une autre exception a eu lieu : {0}.",
ex.Message);
}
finally
{
Console.WriteLine("Quel que soit le résultat, ceci est affiché.");
}
Ainsi, comme nous n'utilisons pas
dbzEx
dans l'exemple précédent, nous pouvons simplement écrirecatch (DivideByZeroException)
au lieu de catch (DivideByZeroException dbzEx)
.
Pour créer vos propres exceptions, vous devez créer une classe qui dérive de la classe
Exception
. Voici un exemple :
public class MyException : Exception
{
DateTime m_errorTime;
static ushort s_errorNumber;
public MyException()
: base("Message par défaut de l'exception.")
{
m_errorTime = DateTime.Now;
s_errorNumber++;
}
public MyException(string message)
: base(message)
{
m_errorTime = DateTime.Now;
s_errorNumber++;
}
public void DisplayError()
{
MessageBox.Show(
base.Message,
string.Format(
"Erreur n°{0} survenue à {1}.",
s_errorNumber,
m_errorTime.ToLongTimeString()),
MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
}
Ainsi, vous pouvez faire :
try
{
// Code dangereux
}
catch (MyException ex)
{
ex.DisplayError();
}