私は次のシナリオと混同しています、私たちはこのようなクラスのセットを持っています
public class A
{
public virtual string SomeMethod()
{
return "A";
}
}
public class B : A
{
public override string SomeMethod()
{
return "B";
}
}
public class C : B
{
public new virtual string SomeMethod()
{
return "C";
}
}
public class D : C
{
public override string SomeMethod()
{
return "D";
}
}
次のメソッドを呼び出すと
private void Test()
{
A a = new D();
B b = new D();
C c = new D();
D d = new D();
Console.WriteLine(a.SomeMethod()); //The method in class B is being called
Console.WriteLine(b.SomeMethod()); //The method in class B is being called
Console.WriteLine(c.SomeMethod()); //The method in class D is being called
Console.WriteLine(d.SomeMethod()); //The method in class D is being called
}
このような出力が得られます
BBDD
宣言された型のメソッドではなく、継承されたメソッドが呼び出されるのはなぜですか。また、クラスのメソッドがD
毎回呼び出されないのはなぜですか。