Finally

Signaler
Messages postés
20
Date d'inscription
jeudi 14 avril 2005
Statut
Membre
Dernière intervention
18 décembre 2008
-
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
-
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

Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
47
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# 
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
47
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#