派生类的印刷品没有被称为,为什么?

时间:2017-05-16 15:11:45

标签: c# code-snippets

我有这个代码。我不明白为什么派生类的打印不被称为。我相信这是因为' 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();    
  }
}

2 个答案:

答案 0 :(得分:3)

因为Print方法不是虚拟的,并且您明确将其标记为完全独立于基类'具有new关键字的方法。将方法更改为虚拟并在派生类中覆盖它:

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

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

答案 1 :(得分:0)

是的,因为你的b是=IFERROR([formula],"") BaseClass而且你没有Type功能virtual,而你却没有Print它在override中,将被称为DerivedClass BaseClass