Почему C # был разработан таким образом?
Насколько я понимаю, интерфейс только описывает поведение и служит для описания договорных обязательств для классов, реализующих интерфейс, в котором реализовано определенное поведение.
Если классы хотят реализовать это поведение в общем методе, почему бы и нет?
Вот пример того, что я имею в виду:
// These items will be displayed in a list on the screen.
public interface IListItem {
string ScreenName();
...
}
public class Animal: IListItem {
// All animals will be called "Animal".
public static string ScreenName() {
return "Animal";
}
....
}
public class Person: IListItem {
private string name;
// All persons will be called by their individual names.
public string ScreenName() {
return name;
}
....
}
IListItem.ScreenName() => ScreenName()
(используя синтаксис C # 7) реализует интерфейсный метод явно, вызывая статический метод. Тем не менее, все становится ужасно, когда вы добавляете наследование к этому (вы должны переопределить интерфейс)