J'espère donc que quelqu'un pourra me donner une justification raisonnable pour expliquer pourquoi les choses sont telles qu'elles sont.
NotImplementedException. Vous vous moquez de moi, n'est-ce pas ?
Non, je ne vais pas prendre un coup bas en disant "Attendez, la méthode est implémentée - elle lève une NotImplementedException". Oui, c'est vrai, vous devez implémenter la méthode pour qu'elle lève une NotImplementedException (contrairement à un appel de fonction virtuelle pure en C++ - ça a du sens !) Même si c'est plutôt amusant, il y a un problème plus sérieux à mon avis.
Je me demande simplement, en présence de l'exception NotImplementedException, comment peut-on faire quoi que ce soit avec .Net ? Êtes-vous censé entourer chaque appel de méthode abstraite d'un bloc try catch pour vous prémunir contre les méthodes qui pourraient ne pas être implémentées ? Si vous attrapez une telle exception, que diable êtes-vous censé en faire ?
Je ne vois aucun moyen de tester si une méthode est réellement implémentée sans l'appeler. Puisque l'appeler peut avoir des effets secondaires, je ne peux pas faire toutes mes vérifications à l'avance et ensuite exécuter mon algorithme. Je dois exécuter mon algorithme, attraper les NotImplementedExceptions et, d'une manière ou d'une autre, ramener mon application à un état normal.
C'est fou. Fou. Insensé. Donc la question est : Pourquoi l'exception NotImplementedException existe-t-elle ? ?
En guise d'attaque préventive, je ne veux pas que quelqu'un réponde par "parce que les concepteurs doivent mettre cela dans le code généré automatiquement". C'est horrible. Je préférerais que le code auto-généré ne compile pas tant que vous ne fournissez pas une implémentation. Par exemple, l'implémentation générée automatiquement pourrait être "throw NotImplementedException ;" où NotImplementedException n'est pas défini !
Quelqu'un a-t-il déjà attrapé et traité une NotImplementedException ? Avez-vous déjà laissé une NotImplementedException dans votre code ? Si oui, cela représentait-il une bombe à retardement (c'est-à-dire que vous l'avez accidentellement laissée là) ou un défaut de conception (la méthode ne devrait pas être implémentée et ne sera jamais appelée) ?
Je me méfie beaucoup de l'exception NotSupportedException aussi... Non supporté ? Qu'est-ce que c'est ? Si elle n'est pas supportée, pourquoi fait-elle partie de votre interface ? Quelqu'un chez Microsoft peut-il épeler "improper inheritance" ? Mais je pourrais commencer une autre question pour cela si je n'obtiens pas trop d'abus pour celle-ci.
Informations supplémentaires :
Este est une lecture intéressante sur le sujet.
Il semble y avoir un fort accord avec Brad Abrams que l'exception "NotImplementedException" concerne une fonctionnalité qui n'est pas encore mise en œuvre, mais qui devrait vraiment l'être (et le sera). Quelque chose comme ce que vous pourriez commencer avec lorsque vous construisez une classe, récupérez toutes les méthodes qui lancent NotImplementedException, puis chassez-les avec du vrai code "
Commentaires de Jared Parsons sont très faibles et devraient probablement être ignorés : NotImplementedException : Lancez cette exception lorsqu'un type n'implémente pas une méthode pour toute autre raison.
En MSDN est encore plus faible sur le sujet, se contentant de déclarer que "l'exception qui est levée lorsqu'une méthode ou une opération demandée n'est pas implémentée".