Statische Vererbung funktioniert genau wie Instanzvererbung. Außer Ihnen ist es nicht erlaubt, statische Methoden virtuell oder abstrakt zu machen.C# virtuelle (oder abstrakte) statische Methoden
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");
}
}
erhalten Sie folgende Ausgabe:
Base class
Child class
Base class
Base class
Aber ich will:
Base class
Child class
Base class
Child class
Wenn ich auf statische Methoden könnte, würde ich Targetmethod virtuellen machen und es würde die Arbeit machen. Aber gibt es eine Arbeit um den gleichen Effekt zu erzielen?
Edit: Ja, ich könnte eine Kopie von Operation in der Kind-Klasse, aber das würde kopieren und einfügen ein großes bisschen Code in jedes Kind, was in meinem Fall ist etwa 35 Klassen, eine Wartung Albtraum.
Warum verwenden Sie statische Funktionen? – munificent
Sie verwechseln die Vererbung mit dem Nachschlagen und dem Ausblenden von Namen. –
Mögliches Duplikat von [Warum kann ich keine abstrakten statischen Methoden in C# haben?] (Https://stackoverflow.com/questions/3284/why-cant-i-have-abstract-static-methods-in-c) –