オーバーライドされた仮想メソッドの「基本実装」を呼び出すにはどうすればよいですか? [重複] 質問する

オーバーライドされた仮想メソッドの「基本実装」を呼び出すにはどうすればよいですか? [重複] 質問する

次のコードの場合、クラス A のメソッド X のバージョンを呼び出す方法はありますか?

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...
  }

ベストアンサー1

C#言語構造を使用すると、ベース関数を明示的に呼び出すことはできません。AまたはのスコープB。本当にそうする必要がある場合は、設計に欠陥があります。つまり、その関数は最初から仮想であってはならないか、基本関数の一部を別の非仮想関数に抽出する必要があります。

あなたはから内部BXはAXを呼び出す

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

しかし、それはまた別の話です。

サーシャ・トゥルフが指摘しているようにこの答え、IL を通じてそれを行うことができます。また、mhand がコメントで指摘しているように、リフレクションを通じてそれを実現することもできるでしょう。

おすすめ記事