Vous faites toujours défiler vers le bas? Voici!
Cette question m'a donné un temps difficile.
try
{
int a=1;
int b=0;
int c=a/b;
}
catch(Exception ex)
{
console.writeline(ex.Message);
}
finally
{
console.writeline("Finally block");
}
console.writeline("After finally");
qu'est-ce qui serait imprimé dans le scénario ci-dessus? Oui l'a bien deviné:
ex.Message - quel qu'il soit (probablement tentative de division par zéro)
Enfin bloquer
Après enfin
try
{
int a=1;
int b=0;
int c=a/b;
}
catch(Exception ex)
{
throw(ex);
}
finally
{
console.writeline("Finally block");
}
console.writeline("After finally");
Qu'est-ce que cette impression? Rien! Il lève une erreur car le bloc catch a généré une erreur.
Dans une bonne structure de programmation, vos exceptions seraient canalisées, dans le sens où ce code sera traité à partir d'une autre couche. Pour stimuler un tel cas, je vais essayer ce code.
try
{
try
{
int a=1;
int b=0;
int c=a/b;
}
catch(Exception ex)
{
throw(ex);
}
finally
{
console.writeline("Finally block")
}
console.writeline("After finally");
}
catch(Exception ex)
{
console.writeline(ex.Message);
}
Dans ce cas, la sortie serait:
- Enfin bloquer
- ex.Message - quoi que ce soit.
Il est clair que lorsque vous interceptez une exception et que vous la relancez dans d'autres couches (Funneling), le code après throw n'est pas exécuté. Il agit de la même manière que le fonctionnement d'un retour à l'intérieur d'une fonction.
Vous savez maintenant pourquoi ne pas fermer vos ressources sur les codes après le bloc catch. Placez-les dans le bloc finally.