Common Type System—Choosing between Abstract and Interface
Microsoft .NET Framework, ASP.NET, Visual C# (CSharp, C Sharp, C-Sharp) Developer Training, Visual Studio
Choosing between Abstract and Interface
Abstract classes and interfaces offer similar functionality, but both have unique pros and cons. Because abstract classes can offer implementations in addition to just an interface, they can make versioning much simpler. Thus, they are the default recommendation, although there are some scenarios in which interfaces make sense too.
As an example of the versioning difficulties they can introduce, imagine that you have released an
abstract class and interface with two methods, void A() and void B(). You are basically stuck with
them. That is, you cannot remove them without breaking classes that had derived from your class or
implemented your interface. With abstract classes, however, you can extend your class over time. If you
wanted to add a new void C() method, for example, you could add this on the abstract class with some
default implementation. Similarly, if you want to add convenience overloads, you are free to do so with
abstract classes. With interfaces, you simply cannot.
Conversely, abstract classes take over derived classes’ type hierarchy. A class can implement an interface yet still maintain some type hierarchy that makes sense. With abstract classes, this is not so. Furthermore, with interfaces you achieve multiple interface inheritance, whereas with abstract classes you cannot.
|

