« Programmation C sharp/Les exceptions » : différence entre les versions

Contenu supprimé Contenu ajouté
ortho
<source> + précision
Ligne 1 :
<noinclude>{{Programmation_C_sharp}}{{NavTitre|book={{BASEPAGENAME}}|prev=Classe abstraite|next=Structures et énumérations}}</noinclude>
 
Une exception est créée et lancée quand une erreur survient. AElle se propage dans la pile d'appel de la manière suivante : à partir du moment où elle est lancée, l'exécution normale est interrompue, et un gestionnaire d'exceptions est recherché dans le bloc d'instruction courant. S'il n'est pas trouvé, la recherche se poursuit dans le bloc englobant celui-ci, ou à défaut, dans le bloc de la fonction appelante, et ainsi de suite... Si la recherche n'aboutit pas, une boîte de dialogue signalant l'exception est affichée.
 
== Attraper une exception ==
Ligne 29 :
 
Exemple :
<source lang="csharp">
try
try
{
{
Console.Write("Entrez un nombre : ");
Console.Write("Entrez un nombre : ");
int n = int.Parse( Console.ReadLine() );
int n = int.Parse( Console.ReadLine() );
Console.WriteLine(" 100/nombre = "+( 100/nombre ));
Console.WriteLine(" 100/nombre = "+( 100/nombre ));
}
}
catch ( DivideByZeroException dbzex )
catch ( DivideByZeroException dbzex )
{
{
Console.Error.WriteLine(" Division par zéro");
Console.Error.WriteLine(" Division par zéro");
}
}
catch ( Exception ex )
catch ( Exception ex )
{
{
Console.Error.WriteLine(
Console.Error.WriteLine(
" Une autre exception a eu lieu : "+ex.Message);
" Une autre exception a eu lieu : "+ex.Message);
}
}
finally
finally
{
{
Console.WriteLine(" Quel que soit le résultat, ceci est affiché");
Console.WriteLine(" Quel que soit le résultat, ceci est affiché");
}
}
</source>
 
Un bloc <tt>finally</tt> est utile pour libérer des ressources à la fin d'un traitement, qu'une erreur ait eu lieu ou non.
 
Exemple :
<source lang="csharp">
Bitmap bm;
Bitmap bm;
try
try
{
{
bm=new Bitmap(100,100);
bm=new Bitmap(100,100);
''...''
...
}
}
finally
finally
{
{
bm.Dispose(); // libérer les ressources
bm.Dispose(); // libérer les ressources
}
}
</source>
 
Cependant, les classes implémentant l'[[Programmation C sharp/Interfaces|interface]] <tt>IDisposable</tt> ont une méthode <tt>Dispose()</tt>, et peuvent être utilisées avec le mot clé <tt>using</tt> :
<source lang="csharp">
using( Bitmap bm = new Bitmap(100,100) ) // <- objet IDisposable
using( Bitmap bm = new Bitmap(100,100) ) // <- objet IDisposable
{
{
''...''
...
} // <- méthode Dispose() appelée automatiquement
} // <- méthode Dispose() appelée automatiquement
</source>
 
== Lancer une exception ==
Ligne 83 ⟶ 89 :
 
Exemple :
<source lang="csharp">
try
try
{
{
Console.Write("Entrez un nombre : ");
Console.Write("Entrez un nombre : ");
int n = int.Parse( Console.ReadLine() );
int n = int.Parse( Console.ReadLine() );
Console.WriteLine(" 100/nombre = "+( 100/nombre ));
Console.WriteLine(" 100/nombre = "+( 100/nombre ));
}
}
catch ( DivideByZeroException dbzex )
catch ( DivideByZeroException dbzex )
{
{
Console.Error.WriteLine(" Division par zéro");
Console.Error.WriteLine(" Division par zéro");
throw; // relance la même exception
throw; // relance la même exception
}
}
</source>
 
== Créer une classe d'exception ==
Ligne 101 ⟶ 109 :
 
Exemple :
<source lang="csharp">
public class ErreurDeScriptException : Exception
public class ErreurDeScriptException : Exception
{
{
// Attributs
// Attributs
private int ligne,colonne;
private string fichier;
 
// Propriétés (en lecture seule)
public int Ligne { get { return ligne; } }
public int Colonne { get { return colonne; } }
public string Fichier { get { return fichier; } }
 
// Constructeur
public ErreurDeScriptException(
string message,
string fichier,
int ligne,
int colonne )
: base(message) // appel au constructeur de la classe Exception
{
this.fichier = fichier;
this.ligne = ligne;
this.colonne = colonne;
}
}
</source>
 
Ensuite, cette classe peut être utilisée comme n'importe quelle autre classe d'exception :
 
<source lang="csharp">
if ( arg==null )
if ( arg==null )
throw new ErreurDeScriptException(
throw new ErreurDeScriptException(
"Un argument est nécessaire", fichier_script, 10 , 5);
"Un argument est nécessaire", fichier_script, 10 , 5);
</source>
 
[[Catégorie:Programmation C sharp (livre)]]