Warum existiert NotImplementedException?

Dieses wirklich urks mich, so dass ich hoffe, jemand kann mir eine vernünftige Begründung dafür, warum die Dinge so sind wie Sie sind.

NotImplementedException. Sie zieht mein Bein, richtig?

Nein, ich werde nicht nehmen Sie die günstigen stechen um dies mit den Worten, "halt, die Methode implementiert ist - es eine NotImplementedException." Ja, das stimmt, Sie implementieren müssen, um die Methode zu werfen, eine NotImplementedException (im Gegensatz zu einer rein virtueller Funktionsaufruf in C++ - nun, das macht Sinn!). Zwar ist das verdammt lustig, es ist ein ernstes problem in meinem Kopf.

Nur Frage ich mich, in Anwesenheit des NotImplementedException, wie kann jemand tun, nichts mit .Net? Sind Sie voraussichtlich wickeln Sie jede abstrakte Methode-Aufruf mit einem try-catch-block zum Schutz gegen die Methoden, die möglicherweise nicht umgesetzt werden? Wenn Sie fangen eine solche Ausnahme, was zum Teufel soll man tun??

Sehe ich keine Möglichkeit zu testen, ob eine Methode tatsächlich umgesetzt wird, ohne ihn aufzurufen. Da ruft es Nebenwirkungen haben können, kann ich nicht alle meine Prüfungen vor und führen Sie dann meinen Algorithmus. Ich habe meinen Algorithmus, fangen NotImplementedExceptions und das einige, wie " roll back meine Anwendung an einem sauberen Zustand.

Es ist verrückt. Mad. Wahnsinn. Die Frage ist also: Warum die NotImplementedException existieren?

Als Präventivschlag, ich möchte nicht, dass jemand zu Antworten, "da müssen Designer stellen diese in den automatisch generierten code." Das ist schrecklich. Ich würde lieber den automatisch generierten code nicht kompilieren, bis Sie liefern eine Implementierung. Zum Beispiel, die automatische Umsetzung könnte sein "werfen NotImplementedException;" wo die NotImplementedException ist nicht definiert!

Hat jemand schon abgefangen und behandelt eine NotImplementedException? Haben Sie jemals hinterließ eine NotImplementedException in deinem code? Wenn ja, hat diese repräsentieren eine Zeit-Bombe (dh, Sie versehentlich verlassen es gibt), oder ein design Fehler (sollte die Methode nicht implementiert werden und wird nie mehr aufgerufen werden)?

Ich bin sehr misstrauisch gegenüber der NotSupportedException auch... Nicht unterstützt? Was das? Wenn es nicht unterstützt wird, warum ist es Teil Ihrer Schnittstelle? Kann mir jemand bei Microsoft Zauber unsachgemäße Vererbung? Aber ich könnte beginnen, eine andere Frage für, wenn ich nicht bekommen, auch Missbrauch.

Zusätzliche info:

Diese ist eine interessante Lektüre zu dem Thema.

Scheint es eine starke übereinstimmung mit Brad Abramsdass "NotImplementedException ist für die Funktionalität, die ist nur noch nicht implementiert, aber eigentlich sollte (und wird). So etwas wie, was Sie vielleicht start mit, wenn Sie erstellen eine Klasse, alle Methoden, es zu werfen NotImplementedException, dann Spülen Sie diese mit dem echten code..."

Kommentare von Jared Parsons sind sehr schwach und sollte wohl ignoriert werden: NotImplementedException: Werfen Sie diese Ausnahme, wenn ein Typ nicht implementieren Sie eine Methode aus einem anderen Grund.

Den MSDN ist sogar noch schwächer auf das Thema, lediglich besagt, dass, "die Ausnahme, Die ausgelöst wird, wenn eine angeforderte Methode oder Vorgang ist nicht implementiert."

InformationsquelleAutor der Frage Daniel Paull | 2009-01-04

Schreibe einen Kommentar