Чому 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) реалізує метод інтерфейсу явно, викликаючи статичний метод. Речі стають некрасивими, коли ви додасте до цього спадщину (вам доведеться знову доповнити інтерфейс)