Après avoir parcouru la plupart des réponses ici, j'aimerais ajouter quelques réflexions.
S'appuyer sur les commentaires de documentation XML et s'attendre à ce que les autres s'appuient sur est un mauvais choix. La plupart des codes C # que j'ai rencontrés ne documentent pas les méthodes complètement et de manière cohérente avec les commentaires de documentation XML. Et puis il y a le plus gros problème que sans les exceptions vérifiées en C #, comment pourriez-vous documenter toutes les exceptions que votre méthode lève pour que votre utilisateur d'API sache comment les gérer toutes individuellement? N'oubliez pas que vous ne connaissez que ceux que vous vous lancez avec le mot-clé throw dans votre implémentation. Les API que vous utilisez dans votre implémentation de méthode peuvent également lancer des exceptions dont vous ne connaissez pas, car elles peuvent ne pas être documentées et que vous ne les gérez pas dans votre implémentation, elles exploseront donc face à l'appelant de votre méthode. En d'autres termes,
Andreas a lié une interview avec Anders Hejlsberg dans les réponses ici sur les raisons pour lesquelles l'équipe de conception C # a décidé de ne pas vérifier les exceptions. La réponse ultime à la question originale est cachée dans cet entretien:
Les programmeurs protègent leur code en écrivant «try finally», donc ils reculeront correctement si une exception se produit, mais ils ne sont pas réellement intéressés par la gestion des exceptions.
En d'autres termes, personne ne devrait être intéressé par le type d'exception auquel on peut s'attendre pour une API particulière, car vous allez toujours les attraper partout. Et si vous voulez vraiment vous soucier des exceptions particulières, c'est à vous de décider comment les gérer et non à quelqu'un qui définit une signature de méthode avec quelque chose comme le mot-clé Java throws, ce qui oblige un utilisateur d'API à gérer des exceptions particulières.
-
Personnellement, je suis déchiré ici. Je suis d'accord avec Anders que le fait de vérifier les exceptions ne résout pas le problème sans ajouter de nouveaux problèmes différents. Tout comme avec les commentaires de la documentation XML, je vois rarement du code C # avec tout ce qui est enveloppé dans des blocs try finally. Il me semble que c'est en effet votre seule option et quelque chose qui semble être une bonne pratique.