Angenommen, es gibt eine Basisklasse A
und eine abgeleitete Klasse B
.
Klasse A
hat zwei Funktionen: fun1()
und fun2()
, wo fun1()
Anrufe fun2()
.
Klasse B
überschreibt fun1()
und fun2()
und fun1()
ruft erneut auf fun2()
.
Ich möchte jedoch base.fun1()
Overriden anrufen fun2()
. Da base.fun1()
Aufrufe fun2()
anstelle der Version der Basisklasse eine ziemlich unglückliche Schleife erzeugen:
fun1() -> fun2() -> base.fun1() -> fun2() -> base.fun1() -> ...
Gibt es eine Möglichkeit, base.fun1()
das Aufrufen der Basisversion von zu erzwingen fun2()
? Ich bin mir bewusst, dass das eigentliche Problem wahrscheinlich in der schlechten Gestaltung dieser Klassen liegt, aber ich bin immer noch neugierig, ob es irgendwie möglich ist.
c#
class
oop
derived-class
Maras
quelle
quelle
fun1() -> fun2() -> base.fun1() -> base.fun2()
. Leider werden nach dem Überschreiben stattdessenbase.fun2()
diebase.fun1()
Anrufefun2()
getätigt.Antworten:
Verwenden Sie das Ausblenden von Methoden.
quelle
Func2
nicht virtuell machen möchtenA
, und (2) äußerste Vorsicht bei diesem Muster. Es kann für Benutzer sehr verwirrend sein, die naiv erwarten, dass der virtuelle Versand einen statischen Versand erhält.