Pourquoi C # a-t-il été conçu de cette façon?
Si je comprends bien, une interface ne décrit que le comportement, et sert à décrire une obligation contractuelle pour les classes implémentant l'interface que certains comportements sont mis en œuvre.
Si les classes souhaitent implémenter ce comportement dans une méthode partagée, pourquoi pas?
Voici un exemple de ce que j'ai en tête:
// 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()
(en utilisant la syntaxe C # 7) implémentera explicitement la méthode d'interface en appelant la méthode statique. Les choses tournent mal quand vous ajoutez l'héritage à cela, cependant (vous devez réimplémenter l'interface)