Heim >Backend-Entwicklung >C++ >Wie rufe ich eine Basisklassenmethode direkt auf und umgehe Zwischenüberschreibungen?

Wie rufe ich eine Basisklassenmethode direkt auf und umgehe Zwischenüberschreibungen?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-01 12:14:101012Durchsuche

How to Call a Base Class Method Directly, Bypassing Intermediate Overrides?

Basismethode direkt aufrufen

In OOP ist der Zugriff auf Basisklassenmethoden innerhalb abgeleiteter Klassen für das Überschreiben von Methoden unerlässlich. Es stellt sich jedoch die Frage: „Wie können wir die Basismethode der Basis aufrufen und dabei alle Zwischenüberschreibungen umgehen?“

Um den unerwünschten Aufruf von Derived.Say() in der SpecialDerived-Klasse zu vermeiden, kann der ursprüngliche Quellcode nicht verwendet werden geändert. Es gibt jedoch eine Problemumgehung. Durch die Einführung einer neuen Methode, CustomSay(), in der Derived-Klasse und deren Überschreibung in SpecialDerived können wir das Standardverhalten umleiten und gleichzeitig die vorhandene Say()-Methode beibehalten.

Hier ist der geänderte Code:

// Cannot change source code
class Derived : Base
{
    public override void Say()
    {
        CustomSay();

        base.Say();
    }

    protected virtual void CustomSay()
    {
        Console.WriteLine("Called from Derived.");
    }
}

class SpecialDerived : Derived
{
    protected override void CustomSay()
    {
        Console.WriteLine("Called from Special Derived.");
    }
}

Wenn Sie nun sd.Say() aufrufen, lautet das Ergebnis:

Called from Special Derived.
Called from Base.

Die Verwendung von a Die neue Methode CustomSay() ermöglicht die Anpassung, ohne die überschriebene Say()-Methode zu ändern. Allerdings wird generell davon abgeraten, auf Basismethoden jenseits der ersten Ebene zuzugreifen, da dies zu Verwirrung und Wartungsproblemen führen kann.

Das obige ist der detaillierte Inhalt vonWie rufe ich eine Basisklassenmethode direkt auf und umgehe Zwischenüberschreibungen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn