When should I use abstract classes and when should I use interfaces? with considering latest version of C#.NET