L'héritage statique fonctionne exactement comme l'héritage d'instance. Sauf que vous n'êtes pas autorisé à rendre les méthodes statiques virtuelles ou abstraites.
class Program {
static void Main(string[] args) {
TestBase.TargetMethod();
TestChild.TargetMethod();
TestBase.Operation();
TestChild.Operation();
}
}
class TestBase {
public static void TargetMethod() {
Console.WriteLine("Classe de base");
}
public static void Operation() {
TargetMethod();
}
}
class TestChild : TestBase {
public static new void TargetMethod() {
Console.WriteLine("Classe enfant");
}
}
Cela affichera :
Classe de base
Classe enfant
Classe de base
Classe de base
Mais je veux :
Classe de base
Classe enfant
Classe de base
Classe enfant
Si je pouvais sur les méthodes statiques, je rendrais TargetMethod virtuel et cela ferait l'affaire. Mais y a-t-il une solution de contournement pour obtenir le même effet ?
Modifier : Oui, je pourrais mettre une copie de Operation dans la classe enfant, mais cela nécessiterait de copier-coller un grand morceau de code dans chaque enfant, ce qui, dans mon cas, est d'environ 35 classes, un cauchemar à entretenir.