我们有两个班级
public class A
{
public void Test()
{
Console.WriteLine("A");
}
}
public class B : A
{
public void Test()
{
Console.WriteLine("A");
}
}
当我们从基类创建派生类时,内存中发生了什么,为什么调用基类方法?
A a = new B();
a.Test() // A
a.Test();
答案 0 :(得分:0)
您的代码将被这样处理(Cast至A
,然后调用Test
方法):
B b = new B();
((A)b).Test();
((A)b).Test();
这就是为什么,它调用基类方法。如果您使用method overriding,则会看到不同的结果:
public class A
{
public virtual void Test()
{
Console.WriteLine("A");
}
}
public class B : A
{
public override void Test()
{
Console.WriteLine("B");
}
}
然后将其视为:
B b = new B();
b.Test();
b.Test();