Supongamos que hay una clase base Ay una clase derivada B.
La clase Atiene dos funciones: fun1()y fun2(), donde fun1()llama fun2().
BAnulaciones 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
Func2no 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.