A decent way to think about this is that instance methods are something performed by the object, while extension methods are something done for the object. I am pretty sure that the Framework Design Guide says that you should implement the instance method whenever possible.
The interface announces, "I care about using this function, but not how it is done." This leaves implementers free to choose how. It separates the intent, the public API, from the mechanism, the class with specific code.
Since this is the main advantage of interfaces, implementing them completely as extension methods seems to have exceeded their goal. Even IEnumerable<T> has an instance method.
Change In addition, objects are designed to work with the data that they contain. Extension methods can only see the public API of the object (since these are only static methods); you will need to set all the state of the object for it to work (OO no-no).
Bryan watts
source share