Dois-je tirer personnalisé exceptions de l'Exception ou ApplicationException dans .NET?

StackOverflow https://stackoverflow.com/questions/52753

  •  09-06-2019
  •  | 
  •  

Question

Quelles sont les meilleures pratiques lors de la création de classes d'exception dans un .NET solution:Pour dériver à partir de System.Exception ou de System.ApplicationException?

Était-ce utile?

La solution

Selon Jeffrey Richter dans le Cadre des lignes Directrices de Conception de livre:

System.ApplicationException est une classe qui ne doit pas être de la partie .NET framework.

Il était destiné à avoir une certaine signification dans le que vous pourriez attraper "tous" les exceptions de l'application, mais le modèle n'a pas été suivie et donc il n'a pas de valeur.

Autres conseils

Vous devez dériver personnalisé exceptions System.Exception.

Même MSDN dit maintenant à ignorer ApplicationException:

Si vous êtes à la conception d'une application qui a besoin de créer sa propre des exceptions, il est conseillé de tirer personnalisé des exceptions à l'Exception classe.Il a été à l'origine pensé que personnalisé exceptions doivent dériver de le ApplicationException classe;cependant, dans la pratique, cela n'a pas été trouvé à ajouter une valeur significative.Pour plus d'informations, voir Les meilleures Pratiques pour la gestion des Exceptions.

http://msdn.microsoft.com/en-us/library/system.applicationexception.aspx

ApplicationException considéré comme inutile c'est une forte, et critique, argument contre ApplicationException.

Résultat:ne l'utilisez pas.Dériver de Exception.

Les auteurs du cadre jugent eux-mêmes ApplicationException sans valeur:

http://blogs.msdn.com/kcwalina/archive/2006/06/23/644822.aspx

avec un bon suivi ici:

http://blogs.msdn.com/kcwalina/archive/2006/07/05/657268.aspx

Dans le doute, j'ai suivi leur livre Cadre des lignes Directrices de Conception.

http://www.amazon.com/Framework-Design-Guidelines-Conventions-Development/dp/0321246756

Le sujet du blog est discuté plus loin de là.

rp

J'ai l'habitude de faire:

private void buttonFoo_Click()
{
    try
    {
       foo();
    } 
    catch(ApplicationException ex)
    {
      Log.UserWarning(ex);
      MessageVox.Show(ex.Message);
    }
    catch(Exception ex)
    {
       Log.CodeError(ex);
       MessageBox.Show("Internal error.");
    }
}

Il permet de faire la différence entre:

  • C# code d'erreur du système qu'il faut que je répare.
  • Utilisateur "Normal" d'erreur qui n'ont pas besoin de correction de moi.

Je sais qu'il n'est pas recommandé d'utiliser ApplicationException, mais il fonctionne très bien puisqu'il y est très peu de classes qui ne respectent pas les ApplicationException modèle.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top