https://www.c-sharpcorner.com/blogs/interface-segregation-principle-in-c-sharp