Dlaczego C # został zaprojektowany w ten sposób?
Jak rozumiem, interfejs opisuje tylko zachowanie i służy opisaniu zobowiązania umownego dla klas wdrażających interfejs, że określone zachowanie jest realizowane.
Jeśli klasy chcą zaimplementować to zachowanie we wspólnej metodzie, dlaczego nie powinny?
Oto przykład tego, co mam na myśli:
// 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()
(przy użyciu składni C # 7) jawnie zaimplementuje metodę interfejsu, wywołując metodę statyczną. Kiedy dodaje się do tego dziedziczenie, robi się brzydko (trzeba ponownie zaimplementować interfejs)