There are technical differences between Abstract Classes and Interfaces, that being an Abstract Class can contain implementation of methods, fields, constructors, etc, while an Interface only contains method and property prototypes.
Two quick thoughts on differences between interfaces and abstract classes:
- Abstract classes desired if future expansion is likely, as an abstract class can be expanded, but an interface would have to be enhanced by addition of another interface, I2.
2. A class can inherit multiple interfaces but only one abstract class.
An Interface defines what something can do (how it behaves), and an Abstract Class defines what something is.
Take for example
IEnumerable, the semantic meaning behind this is that anything that implements
IEnumerable is enumable, it doesn’t mean that it’s an enumeration, but that it can behave like one.
So the short answer is: whenever possible use interfaces and not abstract classes.