Por que o C # foi projetado dessa maneira?
Pelo que entendi, uma interface apenas descreve o comportamento e serve para descrever uma obrigação contratual para as classes que implementam a interface de que determinado comportamento é implementado.
Se as classes desejam implementar esse comportamento em um método compartilhado, por que não deveriam?
Aqui está um exemplo do que tenho em mente:
// 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()
(usando a sintaxe C # 7) implementará o método da interface explicitamente chamando o método estático. As coisas ficam feias quando você adiciona herança a que, embora (você tem que reimplementar a interface)