¿Por qué se diseñó C # de esta manera?
Según tengo entendido, una interfaz solo describe el comportamiento y tiene el propósito de describir una obligación contractual para las clases que implementan la interfaz de que se implementa cierto comportamiento.
Si las clases desean implementar ese comportamiento en un método compartido, ¿por qué no deberían hacerlo?
Aquí hay un ejemplo de lo que tengo en 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 la sintaxis C # 7) implementará el método de interfaz explícitamente llamando al método estático. Sin embargo, las cosas se ponen feas cuando agregas herencia a eso (tienes que volver a implementar la interfaz)