Utilisez cette partie de code par exemple. Vous devez toujours utiliser l'exception la plus spécifique en premier, puis utiliser l'exception la plus générale à la fin. Ou je crois que je peux dire comme vous l'avez dit - L'exception la plus dérivée en premier.
Dans ce cas, le premier bloc catch captures déjà toutes les exceptions de ce ou d'un type super (System.Exception) ». Ceci est la raison de l'ordre d'exception.
try
{
throw new formatException();
}
catch(Exception ex)
{
<...>
}
catch(formatException ex)
{
<...>
}
Modifier -
Si vous regardez la hiérarchie d'héritage de la classe FormatException -
System.Exception
System.SystemException
System.FormatException
et la hiérarchie d'héritage de la classe OutOfMemoryException est -L'ordre de préséance des exceptions n'apparaît dans l'image que si vous avez des blocs catch avec des classes d'exception qui sont soit des classes de base, soit des classes dérivées l'une de l'autre.
Par exemple. si vous avez deux blocs catch - FormatException et Exception, vous devrez vous soucier de l'ordre des blocs de capture car la classe FormatException hérite de la classe Exception. Si le bloc catch Exception est placé avant le bloc catch FormatException, chaque exception est interceptée par le bloc catch Exception (même une exception de format). Si vous avez le bloc catch FormatException avant le bloc catch Exception, une exception de format est interceptée par le bloc catch FormatException spécifique, mais toutes les autres exceptions sont interceptées par le bloc catch Exception. Mais, si vous avez deux blocs catch tels que FormatException et OutOfMemoryException. Alors vous n'avez pas besoin de vous soucier de l'ordre car ces deux classes ne sont pas la base ou dérivées les unes des autres. Donc, ce ne sont que des exceptions spécifiques.
Ainsi, vous pouvez soit -
try
{
throw new formatException();
}
catch(OutOfMemoryException ex)
{
<...>
}
catch(FormatException ex)
{
<...>
}
Ou
try
{
throw new formatException();
}
catch(FormatException ex)
{
<...>
}
catch(OutOfMemoryException ex)
{
<...>
}
Il ne serait pas une différence parce que, peu importe ce que l'ordre est le FormatException est toujours pris par le FormatException spécifique attraper le bloc.C'est pareil pour OutOfMemoryException. J'espère que cela répond à votre question.
C'est le plus spécifique au général. Donc, si vous aviez affaire à un code concernant SQL, vous attraperiez les exceptions SQL avant d'attraper tout le 'Exception' – codingbadger