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. This is the practice used by the Microsoft team which developed the Base Class Library. (COM was designed around interfaces.)
1. Use an abstract class to define a common base class for a family of types.
2. Use an abstract class to provide default behavior.
3. 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.
1. Use interfaces to introduce polymorphic behavior without subclassing and to model multiple inheritance—allowing a specific type to support numerous behaviors.
2. Use an interface to design a polymorphic hierarchy for value types.
3. 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.
for more refer:
http://mycodelines.wordpress.com/2009/09/01/in-which-scenario-we-use-abstract-classes-and-interfaces/[
^]