cyrare
Messages postés20Date d'inscriptionjeudi 14 avril 2005StatutMembreDernière intervention18 décembre 2008
-
2 mai 2006 à 19:29
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 2008
-
2 mai 2006 à 21:07
Bonjour,
Question absolument pas urgente, je cherche à comprendre la subtilité qu'il y a entre :
J'ai l'impression que les 2 codes sont identiques, mais j'imagine qu'il y a forcément une différence, sinon, finally n'existerait pas... J'ai cherché sur le net, mais rien de très clair à ce sujet.
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 200857 2 mai 2006 à 20:57
Salut,
Petit test simple :
<hr>
public
class
Form1 :
Form
{
public Form1()
{
try
{
Test();
}
catch (
Exception e)
{
MessageBox.Show(
"Dans catch constructeur");
}
}
public
void Test()
{
try
{
MessageBox.Show(
"Dans try test");
throw
new
Exception();
}
catch (
Exception)
{
MessageBox.Show(
"Dans catch test");
throw;
}
finally
{
MessageBox.Show(
"Dans finally");
}
MessageBox.Show(
"Apres finally");
}
<hr>
L'instruction apres le finally n'est pas appelée, pourtant, celle dans le finally l'est.
Le finally est la pour t'assurer que le bloc d'instruction qu'il contient est toujours appelé.
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 200857 2 mai 2006 à 21:07
Autre exemple : si tu met un return dans ton try ou ton catch, ou si une exception n'est pas gérée dans ta méthode (enleve le catch de la méthode test de mon exemple), le finally est quand meme appelé, et pas le code suivant.
Donc pour etre plus explicite, le finally est appelé quoiqu'il arrive, ce qui est un comportement crucial pour fermer un fichier ouvert, clore une connexion a une base de données, liberer et nettoyer les ressources, ...