これは本当に、本当に私を悩ませているので、誰かがなぜ物事がそのままであるかについて合理的な正当化をしてくれることを願っています.
NotImplementedException. あなたは私の足を引っ張っていますよね?
いいえ、「ちょっと待ってください。メソッドが実装されているので、NotImplementedException がスローされます」と安易に言うつもりはありません。はい、そうです。NotImplementedException をスローするメソッドを実装する必要があります (C++ での純粋な仮想関数呼び出しとは異なります。これは理にかなっています!)。それはかなりおかしな話ですが、私の心にはもっと深刻な問題があります。
NotImplementedException が存在する場合、どうすれば .Net で何かできるのでしょうか? 実装されていない可能性のあるメソッドから保護するために、すべての抽象メソッド呼び出しを try catch ブロックでラップする必要がありますか? そのような例外をキャッチした場合、一体どうすればよいのでしょうか??
メソッドを呼び出さずに実際に実装されているかどうかをテストする方法がわかりません。それを呼び出すと副作用が生じる可能性があるため、事前にすべてのチェックを行ってからアルゴリズムを実行することはできません。アルゴリズムを実行し、NotImplementedExceptions をキャッチして、アプリケーションを正常な状態にロールバックする必要があります。
それはクレイジーです。狂った。非常識。問題は 、なぜ NotImplementedException が存在するのかということです。
先制攻撃として、「設計者はこれを自動生成コードに入れる必要があるため」と答えてほしくありません。これは恐ろしいです。実装を提供するまで、自動生成されたコードをコンパイルしないでください。たとえば、自動生成された実装は「throw NotImplementedException;」のようになります。NotImplementedException は定義されていません。
NotImplementedException をキャッチして処理したことのある人はいますか? コードに NotImplementedException を残したことがありますか? もしそうなら、これは時限爆弾 (つまり、誤ってそこに置き忘れた) または設計上の欠陥 (メソッドは実装されるべきではなく、決して呼び出されない) を表していますか?
NotSupportedException も非常に疑わしいです... サポートされていませんか? 何?サポートされていない場合、それがインターフェイスの一部になっているのはなぜですか? マイクロソフトの誰かが不適切な継承を綴ることができますか? しかし、この質問に対してあまり虐待を受けなければ、別の質問を始めるかもしれません.
追加情報:
これは、この主題に関する興味深い読み物です。
「NotImplementedException は、まだ実装されていないが、実際には実装されるべき (そして実装される予定) の機能のためのものである」という Brad Abrams との強い合意があるようです。そこに NotImplementedException をスローし、実際のコードでそれらをフラッシュします…」
Jared Parsonsからのコメントは非常に脆弱であり、おそらく無視する必要があります: NotImplementedException: 型が何らかの理由でメソッドを実装しない場合、この例外をスローします。
MSDNはこの件に関してさらに弱く、「要求されたメソッドまたは操作が実装されていない場合にスローされる例外」とだけ述べています。