ホームページ > バックエンド開発 > C++ > C# の派生クラスから基本クラスの仮想メソッド実装にアクセスするにはどうすればよいですか?

C# の派生クラスから基本クラスの仮想メソッド実装にアクセスするにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-26 18:43:09
オリジナル
944 人が閲覧しました

How Can I Access a Base Class's Virtual Method Implementation from a Derived Class in C#?

仮想メソッドのオーバーライド: 基本実装へのアクセス

オブジェクト指向環境では、クラスが仮想メソッドをオーバーライドすると、それが共通のメソッドになります。元の実装にアクセスする方法に関する質問です。

次のことを検討してください。 code:

class A
{
  virtual void X() { Console.WriteLine("x"); }
}

class B : A
{
  override void X() { Console.WriteLine("y"); }
}

class Program
{
  static void Main()
  {
    A b = new B();
    // Call A.X somehow, not B.X...
  }
}
ログイン後にコピー

目標は、クラス B のスコープからクラス A の X メソッドを呼び出すことです。ただし、仮想メソッドをオーバーライドするときのデフォルトの動作は、派生クラスの実装を置き換えることです。

基本実装へのアクセス

C# では、残念ながら次のことはできません。オーバーライドされたメソッドの外部から基本メソッド実装に明示的にアクセスします。これは、仮想メソッドのディスパッチ メカニズムが呼び出しを B のオーバーライドされた実装に動的にバインドするためです。

代替アプローチ

基本実装へのアクセスが重要な場合は、考慮に値する設計上の欠陥。この機能は仮想メソッドの目的に合わない可能性があるため、非仮想メソッドで実装する必要がある可能性があります。

または、オーバーライドされたメソッド自体内で基本実装を呼び出すこともできます:

class B : A
{
  override void X() { 
    base.X();
    Console.WriteLine("y"); 
  }
}
ログイン後にコピー

ただし、このメソッドの呼び出しは、派生クラスのオーバーライドされたスコープ内に限定されますmethod.

さらなる探索

C# には基本実装にアクセスする直接メソッドが提供されていませんが、リフレクションや IL の使用など、考慮すべき代替アプローチがあります。この動作を実現するための (中間言語) 操作。

以上がC# の派生クラスから基本クラスの仮想メソッド実装にアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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