Lancer une exception ne doit naturellement être effectué que dans une situation exceptionnelle.
Pour la manipulation, je dirais qu'il ya deux circonstances quand vous voulez capturer une exception:
quand il y a une traduction à faire
- à un code d'erreur
- Pour une autre exception
- Pour quelque chose que l'utilisateur peut comprendre
à une limite du module
- retour de COM appelle, par exemple (dans un cadre non-aware exception)
- retour d'un fil (il n'y a personne pour prendre autrement)
- retourné à partir d'une fonction appelée-retour (car il est peu probable que le mécanisme de rappel sait ou se soucie de votre exception.)
Si vous vous trouvez faire un try-catch-nettoyage-rethrow genre de chose, utilisez RAII plutôt une d se débarrasser de l'essai ... attraper entièrement. Ecrivez votre code de sorte que, si une exception se produit, il agit de manière sensée. Recherchez les garanties Abrahams pour plus de détails sur ce que cela implique. Une réponse à MakerOfThings7 ci-dessous, parce que c'était trop long pour un commentaire.
Par "Quelque chose que l'utilisateur peut comprendre", je veux dire par exemple un message d'erreur pop-up. Imaginez, si vous voulez, que l'utilisateur clique sur un bouton de l'interface utilisateur de votre application pour aller récupérer certaines données. Votre gestionnaire de clics sur un bouton envoie vers une interface de stockage de données. Cette interface pourrait obtenir les données d'un flux de mémoire, d'un fichier, d'une base de données. Qui sait? À leur tour, ceux-ci peuvent échouer, générant une exception MemoryStreamException, une exception FileException ou une exception DatabaseException. Celles-ci ont pu être jetées 15 images de pile et ont été correctement ignorées par un code de sécurité des exceptions bien écrit qui n'a pas besoin de les traduire. Le gestionnaire de clic de bouton ne sait rien de cela, car il existe une armée croissante de méthodes de stockage de données disponibles pour l'interface de stockage de données. Ainsi, l'interface de stockage de données intercepte ces exceptions et les traduit en une exception DataStorageException à usage général. Ceci est jeté.
Ensuite, le bouton gestionnaire de clic qui a appelé l'interface de stockage de données des captures de cette exception, et a suffisamment d'informations pour pouvoir afficher une sorte de message d'erreur à l'utilisateur, traduit l'exception dans un texte bien formaté et présente il.
+1 puisque cela semble être clair, défini et logique.Toujours à la recherche d'exemples d'exception qui pourraient en tirer parti. par exemple. "Pour quelque chose que l'utilisateur peut comprendre" peut inclure System.Globalisation – LamonteCristo
Je pense que vous devriez écrire un livre, ou un article sur vos perspectives ... avec des exemples de code (C#, java ...?) Aussi. Merci! – LamonteCristo