Is an interface + extension methods (mixin) preferable to an abstract class?
If your answer is \"it depends\", what does it depend upon?
I see t
IMHO, this is the wrong question.
You should use everything for what it is designed for.
They are static methods and can not be overridden and not be mocked in a unit test. Is is a non-OO language feature and the caller is statically bound to it.
Abstract base classes are really often misused to "reuse code" (instead of a real inheritance). This applies to inheritance in general.
The question should be: "When should I use Interfaces, extension methods or base classes?"
Edit:
Or the question should be: "How do I write reusable functionality that does not belong to a base class?"
In general I would say, extension methods are the wrong place for business logic, except of special cases or special design decisions.
Base classes are only in rare cases the right decision. In doubt, it is not. In no-doubt, you should think again about it.