Статическое наследование работает так же, как наследование экземпляра. Кроме того, вам не разрешено делать статические методы виртуальными или абстрактными.
class Program {
static void Main(string[] args) {
TestBase.TargetMethod();
TestChild.TargetMethod();
TestBase.Operation();
TestChild.Operation();
}
}
class TestBase {
public static void TargetMethod() {
Console.WriteLine("Base class");
}
public static void Operation() {
TargetMethod();
}
}
class TestChild : TestBase {
public static new void TargetMethod() {
Console.WriteLine("Child class");
}
}
Это выведет:
Base class
Child class
Base class
Base class
Но я хочу:
Base class
Child class
Base class
Child class
Если бы я мог использовать статические методы, я бы сделал TargetMethod виртуальным, и он выполнил бы эту работу. Но есть ли работа, чтобы получить тот же эффект?
Изменить: Да, я могу поместить копию Операции в дочерний класс, но для этого потребуется скопировать и вставить большой бит кода в каждый ребенок, который в моем случае составляет около 35 классов, кошмар обслуживания.