L'ereditarietà statica funziona come l'ereditarietà di istanza. Tranne che non ti è permesso di rendere i metodi statici virtuali o astratti.Metodi statici C# virtuali (o astratti)
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");
}
}
Questo stamperà:
Base class
Child class
Base class
Base class
Ma voglio:
Base class
Child class
Base class
Child class
Se ho potuto sui metodi statici, mi farebbe TargetMethod virtuale e sarebbe fare il lavoro. Ma c'è un lavoro in giro per ottenere lo stesso effetto?
Modifica: Sì, potrei inserire una copia di Operazione nella classe figlio, ma ciò richiederebbe copia e incolla di un gran numero di codice in ogni bambino, che nel mio caso è di circa 35 classi, un incubo di manutenzione.
Perché stai utilizzando funzioni statiche? – munificent
Si sta confondendo l'ereditarietà con la ricerca e il nome nascosto. –
Possibile duplicato di [Perché non posso avere metodi statici astratti in C#?] (Https://stackoverflow.com/questions/3284/why-cant-i-have-abstract-static-methods-in-c) –