次のコードの場合、クラス 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 がコメントで指摘しているように、リフレクションを通じてそれを実現することもできるでしょう。