ホームページ > バックエンド開発 > C++ > 基本クラスのメソッドをオーバーライドした派生クラスから呼び出すにはどうすればよいですか?

基本クラスのメソッドをオーバーライドした派生クラスから呼び出すにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-30 06:07:12
オリジナル
1004 人が閲覧しました

How Can I Call a Base Class Method From a Derived Class That Has Overridden It?

base.base.method() の例外的な呼び出し

基本構造からクラスを派生する場合、base キーワード直接の親クラスで定義されたメンバーへのアクセスを許可します。ただし、例外的な状況では、継承階層のさらに上のクラスからメソッドを呼び出す必要がある場合があります。

DerivedSay() をオーバーライドする、提供されたコード シナリオを考えてみましょう。 ベースメソッド。 SpecialDerived 内で、後続の Say() のオーバーライドは base.Say() を呼び出し、Say() を実行することを目的としています。 >ベース.

予想 vs.実際の動作

予想される出力は次のとおりです:

Called from Special Derived.
Called from Base.
ログイン後にコピー
ただし、メソッドのオーバーライドの性質により、実際の出力には

Say()から派生:

Called from Special Derived.
Called from Derived.
Called from Base.
ログイン後にコピー
問題への対処

base.base.method()

の直接呼び出しはサポートされていない場合は、別のアプローチが必要です。 SpecialDerived で提供されている更新された実装は、次のことを示しています。

追加の保護された仮想メソッド
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()

を定義することで、Derived は次のことができます。他の派生に影響を与えることなく、目的の動作を処理します。 class.

代替リフレクション アプローチ

継承構造の変更が実現できないシナリオでは、以下に示すようにリフレクション ベースのアプローチを採用できます。

このアプローチでは、リフレクションを利用して
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()

メソッドを動的に取得します。 Base を作成し、標準のメソッド解決プロセスを回避して直接実行します。

以上が基本クラスのメソッドをオーバーライドした派生クラスから呼び出すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート