私は次のコードサンプルを持っています:
public class Base
{
public virtual void MyMethod(int param)
{
Console.WriteLine("Base:MyMethod - Int {0}", param);
}
}
public class Derived1 : Base
{
public override void MyMethod(int param)
{
Console.WriteLine("Derived1:MyMethod - Int {0}", param);
}
public void MyMethod(double param)
{
Console.WriteLine("Derived1:MyMethod - Double {0}", param);
}
}
class Program
{
static void Main(string[] args)
{
Base objB = new Base();
objB.MyMethod(5);
Base objBD = new Derived1();
objBD.MyMethod(5);
Derived1 objD = new Derived1();
objD.MyMethod(5);
Console.ReadLine();
}
}
上記のコードの出力は次のとおりです。
ベース:MyMethod - Int 5
Derived1:MyMethod - Int 5
Derived1:MyMethod - ダブル 5
「objD」を使用した「MyMethod」の 3 回目の呼び出しで、実際に INT を渡すときに「DOUBLE」オーバーロードが使用されるのはなぜですか。
「objBD」を使用した 2 番目の呼び出しは、正しく動作しているようです。提案してください。