Abstraction :   Hides  the implementation details of your methods. Provides a base to  variations in the application which can grow over a period of time.    Abstraction is virtual class design.    Before actually defining class, developer will think about what all properties, methods and event will be   there in my class.   Example :   public abstract class Automobile   {     //Properties     public int DoorCount { .. }     public string EngineType { .. }     public float Height { .. }     public float GasTankSize { .. }     public float WheelBase { .. }     public float WheelSize { .. }     //Abstract Properties     public abstract string BodyType { get; }     //Methods     public float CalculateFuelEfficiency(int lastMileage);   }  The  Automobile class is the interface, in that it defines an interface that  classes will derive from. You can't directly instantiate it through new  Automobile() because it's not an implem...