Perché C # è stato progettato in questo modo?
A quanto ho capito, un'interfaccia descrive solo il comportamento e serve allo scopo di descrivere un obbligo contrattuale per le classi che implementano l'interfaccia che un determinato comportamento è implementato.
Se le classi desiderano implementare quel comportamento in un metodo condiviso, perché non dovrebbero?
Ecco un esempio di ciò che ho in 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 sintassi C # 7) implementerà esplicitamente il metodo di interfaccia chiamando il metodo statico. Le cose diventano brutte quando aggiungi l'eredità a ciò, però (devi reimplementare l'interfaccia)