Interface vs. Abstract Classes

An abstract class permits you to make functionality that subclasses can implement or override whereas an interface only permits you to state functionality but not to implement it. A class can extend only one abstract class while a class can implement multiple interfaces.

When should I use an Abstract class?

It should be used when various implementations of the same kind share a common behavior.

When should I use an Interface?

It is better to use interface when various implementations share only method signature. Polymorphic hierarchy of value types.

It really depends on the kind of problem you’re dealing with.