Статическое наследование работает так же, как наследование экземпляра. За исключением того, что вы не можете делать статические методы виртуальными или абстрактными.
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, и он бы сделал эту работу. Но есть ли способ получить такой же эффект?
Редактировать: Да, я мог бы поместить копию Operation в дочерний класс, но для этого потребовалось бы скопировать и вставить большой фрагмент кода в каждый дочерний класс, что в моем случае составляет около 35 классов, - кошмар обслуживания. *