La herencia estática funciona igual que la herencia de instancias. Excepto que no está permitido hacer métodos estáticos virtuales o abstractos.C# métodos estáticos virtuales (o abstractos)
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");
}
}
Esta es la salida:
Base class
Child class
Base class
Base class
Pero quiero:
Base class
Child class
Base class
Child class
Si pude sobre los métodos estáticos, lo haría TargetMethod virtual y que haría el trabajo. ¿Pero hay una solución alternativa para obtener el mismo efecto?
Editar: Sí, podría poner una copia de Operación en la clase secundaria, pero esto requeriría copiar y pegar una gran cantidad de código en cada niño, que en mi caso son alrededor de 35 clases, una pesadilla de mantenimiento.
¿Por qué está utilizando funciones estáticas? – munificent
Está confundiendo la herencia con búsqueda y ocultación de nombres. –
Posible duplicado de [¿Por qué no puedo tener métodos estáticos abstractos en C#?] (Https://stackoverflow.com/questions/3284/why-cant-i-have-abstract-static-methods-in-c) –