Dziedziczenie statyczne działa tak samo jak dziedziczenie instancji. Tyle tylko, że nie wolno ci uczynić metod statycznych wirtualnymi lub abstrakcyjnymi.C# wirtualne (lub abstrakcyjne) metody statyczne
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");
}
}
Wyjście to będzie:
Base class
Child class
Base class
Base class
Ale chcę:
Base class
Child class
Base class
Child class
Jeśli mogę na metodach statycznych, chciałbym zrobić TargetMethod wirtualny i byłoby wykonać zadanie. Ale czy jest jakieś obejście, aby uzyskać ten sam efekt?
Edycja: Tak, mógłbym umieścić kopię Operacji w klasie dziecka, ale wymagałoby to skopiowania i wklejenia dużego kodu do każdego dziecka, co w moim przypadku dotyczy około 35 klas, koszmar utrzymania.
Dlaczego używasz funkcji statycznych? – munificent
Jesteś mylące dziedziczenia z wyszukiwaniem i ukrywanie nazwy. –
Możliwy duplikat [Dlaczego nie mogę mieć abstrakcyjnych metod statycznych w języku C#?] (Https://stackoverflow.com/questions/3284/why-cant-i-have-abstract-static-methods-in-c) –