Suponha que exista classe base A
e classe derivada B
.
A classe A
tem duas funções: fun1()
e fun2()
, onde fun1()
chama fun2()
.
A classe B
substitui fun1()
e fun2()
, e novamente fun1()
chama fun2()
.
No entanto, eu gostaria de chamar base.fun1()
overriden fun2()
. Desde base.fun1()
chamadas em fun2()
vez da versão da classe base que cria um loop bastante infeliz:
fun1() -> fun2() -> base.fun1() -> fun2() -> base.fun1() -> ...
Existe alguma maneira de forçar base.fun1()
a chamada da versão base fun2()
? Estou ciente de que o problema real provavelmente está no design inadequado dessas classes, mas ainda estou curioso para saber se isso é possível.
c#
class
oop
derived-class
Maras
fonte
fonte
fun1() -> fun2() -> base.fun1() -> base.fun2()
. Infelizmente, após a substituiçãobase.fun2()
, asbase.fun1()
chamadas sãofun2()
substituídas.Respostas:
Use o método oculto.
fonte
Func2
não virtualA
e (2) tenha extrema cautela com esse padrão. Pode ser muito confuso para os usuários que esperam ingenuamente que o despacho virtual obtenha despacho estático.