当基类=新派生类时,内存中发生了什么

时间:2018-12-03 18:02:23

标签: c# oop inheritance polymorphism clr

我们有两个班级

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();

1 个答案:

答案 0 :(得分:0)

您的代码将被这样处理(CastA,然后调用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();