I used to be kind of “interface crazy“ in my designs. I'm starting to rethink that...
Base Classes vs. Interfaces
An interface type is a specification of a protocol, potentially supported by many object types. Use base classes instead of interfaces whenever possible. From a versioning perspective, classes are more flexible than interfaces. With a class, you can ship Version 1.0 and then in Version 2.0 add a new method to the class. As long as the method is not abstract, any existing derived classes continue to function unchanged.
Because interfaces do not support implementation inheritance, the pattern that applies to classes does not apply to interfaces. Adding a method to an interface is equivalent to adding an abstract method to a base class; any class that implements the interface will break because the class does not implement the new method.
Interfaces are appropriate in the following situations:
- Several unrelated classes want to support the protocol.
- These classes already have established base classes (for example, some are user interface (UI) controls, and some are XML Web services).
- Aggregation is not appropriate or practical.
In all other situations, class inheritance is a better model.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpgenref/html/cpconBaseClassUsageGuidelines.asp