Supongamos que hay una clase base A
y una clase derivada B
.
La clase A
tiene dos funciones: fun1()
y fun2()
, donde fun1()
llama fun2()
.
B
Anulaciones de clase fun1()
y fun2()
, y nuevamente fun1()
llamadas fun2()
.
Sin embargo, me gustaría llamar base.fun1()
al reemplazo fun2()
. Desde base.fun1()
llamadas en fun2()
lugar de la versión de la clase base que crea un bucle bastante desafortunado:
fun1() -> fun2() -> base.fun1() -> fun2() -> base.fun1() -> ...
¿Hay alguna forma de forzar base.fun1()
a llamar a la versión base de fun2()
? Soy consciente de que el problema real probablemente radica en el mal diseño de esas clases, pero todavía tengo curiosidad si de alguna manera es posible.
c#
class
oop
derived-class
Maras
fuente
fuente
fun1() -> fun2() -> base.fun1() -> base.fun2()
. Desafortunadamente, después de anularbase.fun2()
, lasbase.fun1()
llamadas en sufun2()
lugar.Respuestas:
Utiliza el método de ocultación.
fuente
Func2
no sea virtualA
, y (2) tenga mucho cuidado con este patrón. Puede ser muy confuso para los usuarios que ingenuamente esperan que el despacho virtual obtenga un despacho estático.