これについて考える適切な方法は、インスタンス メソッドはオブジェクトによって行われるものであり、拡張メソッドはオブジェクトに対して行われるものであるということです。フレームワーク デザイン ガイドラインでは、可能な限りインスタンス メソッドを実装する必要があると述べています。
インターフェイスは、「この機能を使用することに関心がありますが、それがどのように達成されるかは気にしません」と宣言します。これにより、実装者は方法を自由に選択できます。これは、パブリック API であるインテントを、具体的なコードを持つクラスであるメカニズムから分離します。
これがインターフェイスの主な利点であるため、それらを完全に拡張メソッドとして実装すると、その目的が無効になるようです。IEnumerable<T>
インスタンスメソッドもあります。
編集:また、オブジェクトは、含まれるデータに作用することを意図しています。拡張メソッドは、オブジェクトのパブリック API しか見ることができません (静的メソッドであるため)。オブジェクトを機能させるには、オブジェクトの状態をすべて公開する必要があります (オブジェクト指向ノーノー)。