You want to know when to use base classes versus interfaces.
When defining a set of methods that a group of types should expose, prefer abstract base classes to interfaces.
An interface can be a better option if you’re writing an application that uses .NET remoting; otherwise, favor abstract base classes. You can extend a base class with new methods and properties without breaking existing clients. Also, members in an abstract class can have a default implementation. This reduces the amount of code required when inheriting from the base class.