アプリケーションでは、コンパイル時の型ではなく実行時の型に基づいてメソッドを呼び出す .NET が必要です。
簡単な例:
class A { }
class B : A { }
static void Main(string[] args)
{
A b = new B();
Print(b);
}
static void Print(A a)
{
Console.WriteLine("Called from A");
}
static void Print(B b)
{
Console.WriteLine("Called from B");
}
上記のコードは実際にはを出力しますCalled from A
が、必要なのはCalled from B
.
これは期待どおりに機能します。
static void Print(A a)
{
var b = a as B;
if (b != null)
return Print(b);
else
Console.WriteLine("Called from A");
}
しかし、保守性のために、それは望ましくありません。
この質問は次の質問に似ていると思います:オブジェクトのランタイム タイプに基づいてこのメソッドが選択されないのはなぜですか? 、ただし Java ではなく .NET 用です。