Base.base.method() ausnahmsweise aufrufen
Beim Ableiten von Klassen aus einer Basisstruktur das Schlüsselwort base ermöglicht den Zugriff auf Mitglieder, die in der unmittelbaren übergeordneten Klasse definiert sind. In Ausnahmesituationen kann es jedoch erforderlich sein, Methoden von Klassen weiter oben in der Vererbungshierarchie aufzurufen.
Betrachten Sie das bereitgestellte Codeszenario, in dem Derived Say() überschreibt. Methode der Basis. Innerhalb von SpecialDerived ruft eine nachfolgende Überschreibung von Say() base.Say() auf, um Say() von Basis.
Erwartet vs. tatsächlich Verhalten
Die erwartete Ausgabe ist:Called from Special Derived. Called from Base.
Say() von Abgeleitet:
Called from Special Derived. Called from Derived. Called from Base.
Adressierung das Problem
Da der direkte Aufruf vonbase.base.method() nicht unterstützt wird, ist ein alternativer Ansatz erforderlich. Die bereitgestellte aktualisierte Implementierung in SpecialDerived zeigt dies:
class SpecialDerived : Derived { public override void Say() { Console.WriteLine("Called from Special Derived."); CustomSay(); // Calls CustomSay() from Derived instead of Say() base.Say(); } protected virtual void CustomSay() { Console.WriteLine("Called from Derived."); } }
CustomSay(), kann Derived Behandeln Sie das gewünschte Verhalten, ohne andere abgeleitete Klassen zu beeinträchtigen.
Alternative Reflexion Ansatz
In Szenarien, in denen eine Änderung der Vererbungsstruktur nicht möglich ist, kann ein reflexionsbasierter Ansatz wie unten gezeigt verwendet werden:class SpecialDerived : Derived { public override void Say() { Console.WriteLine("Called from Special Derived."); var ptr = typeof(Base).GetMethod("Say").MethodHandle.GetFunctionPointer(); var baseSay = (Action)Activator.CreateInstance(typeof(Action), this, ptr); baseSay(); } }
Say()-Methode von Base und führen Sie sie direkt aus, um die Standardmethodenauflösung zu umgehen Prozess.
Das obige ist der detaillierte Inhalt vonWie kann ich eine Basisklassenmethode aus einer abgeleiteten Klasse aufrufen, die sie überschrieben hat?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!