Derived class 的 print 没有被调用,为什么?

Derived class's print isn't called, why?

我有这个代码。我不明白为什么不调用派生的 class 的打印。我相信这是因为 'new'。我不确定它的功能。

using System;
class BaseClass
{
  public void Print()
  {
     System.Console.WriteLine("BaseClass");
  }
}

class DerivedClass : BaseClass
{
  new public void Print()
  {
     System.Console.WriteLine("DerivedClass");
  }
}

class Program
{
  public static void Main()
  {
     BaseClass b;
     b = new BaseClass();
     b.Print();   

     b = new DerivedClass();
     b.Print();    
  }
}

因为 Print 方法不是虚拟的,并且您使用 new 关键字将其明确标记为完全独立于基础 class' 方法。将方法更改为 virtual 并在派生的 class:

中覆盖它
class BaseClass
{
  public virtual void Print()
  {
     System.Console.WriteLine("BaseClass");
  }
}

class DerivedClass : BaseClass
{
  public override void Print()
  {
     System.Console.WriteLine("DerivedClass");
  }
}

是的,因为你的 b 是 BaseClass Type 并且你没有 virtual 功能 Print 在它里面你没有你不能 override 它在 DerivedClass 中,将被称为 BaseClass Print().