Abstract classes vs Interfaces

Viewed 6632

I'm a bit confused about the usage of Abstract classes in C#. In C++, it makes sense to define a template which classes inheriting the abstract class can follow. But, in C# doesn't Interface serve the same purpose?

True that abstract classes can have default implementation which is not provided by Interfaces. So if implementation doesn't need to be included in base class, is it better to go for Interfaces?

14 Answers

For your first question, Yes.

For your second answer i'll give you some tips I've followed.

  • Use abstract classes and interfaces in combination to optimize your design trade-offs.

Use an abstract class

  • When creating a class library which will be widely distributed or reused—especially to clients, use an abstract class in preference to an interface; because, it simplifies versioning.

  • Use an abstract class to define a common base class for a family of types.

  • Use an abstract class to provide default behavior.

  • Subclass only a base class in a hierarchy to which the class logically belongs.

Use an interface

  • When creating a standalone project which can be changed at will, use an interface in preference to an abstract class; because, it offers more design flexibility.

  • Use interfaces to introduce polymorphic behavior without subclassing and to model multiple inheritance—allowing a specific type to support numerous behaviors.

  • Use an interface to design a polymorphic hierarchy for value types.

  • Use an interface when an immutable contract is really intended.

  • A well-designed interface defines a very specific range of functionality. Split up interfaces that contain unrelated functionality.

Related