[Parameter] When to use [Abstract Class] It is better to use abstract class when various implementations of the same kind share common behaviour. Use abstract class to define common base class for family of types. [Interface] 
It is better to use interface when various implementations share only method signature. Use interface when immutable contract is required. Using interface we can design polymorphic heirarchy of value types.