C# classes in an inheritance hierarchy are either interfaces, abstract base classes, or concrete derived classes.
-
Interface classes provide a contract for service without binding the client to an implementation.
-
Abstract base classes support sharing of code and data resources across all concrete derived classes.
-
Concrete classes are specializations of their base type(s), providing a service unique to that class.
All of these specializations should implement the metaphor defined by their base.
Think of public inheritance as an "is-a" relationship between derived and base classes.