Finally

cyrare Messages postés 20 Date d'inscription jeudi 14 avril 2005 Statut Membre Dernière intervention 18 décembre 2008 - 2 mai 2006 à 19:29
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 - 2 mai 2006 à 21:07
Bonjour,

Question absolument pas urgente, je cherche à comprendre la subtilité qu'il y a entre :

try
{
     [Instructions A]
}
catch
{
     [Instructions B]
}
finally
{
     [Instructions C]
}

et

try

{

     [Instructions A]

}

catch

{

     [Instructions B]

}
[Instructions C]

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.

Merci pour vos lumières. :)

2 réponses

MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
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é.

Mx
MVP C# 
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
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, ...

Mx
MVP C# 
0
Rejoignez-nous