これは.NETプラットフォームに関するより哲学的な質問ですが、他の言語でも役立つかもしれません。私は多くの単体テストを行っていますが、特に私がしばしば苦労しているサードパーティのコンポーネントを使用している場合はそうです。.NETでは、コンポーネントの設計者に、どのメソッドを仮想化するかどうかを選択するという大きな主張があります。1つはコンポーネントの使用方法(仮想化する意味がある)、もう1つはコンポーネントのモック機能です。Shimsを使用してサードパーティのコンポーネントをモックアップできますが、これは多くの場合、設計や複雑さを悪化させます。.NETでのすべてのメソッドの仮想化(JAVAには最初からあります)についての議論は、パフォーマンスに関するものでした。しかし、それはまだ問題ですか?なぜすべてのメソッドが.NET virtualではないのか、または各クラスに少なくとも1つのインターフェイスがないのはなぜですか?