上面用的方法只是hide继承下来的方法而已,要override,用下列句式:class Employee
{
  public virtual void CalculatePay()
  {
     ....
   }
}
class ContractEmployee : Employee
{
   public override void CalculatePay()
   {
      ...
    }
}
class SalariedEmployee : Employee
{
    public override void CalculatePay()
   {
          ....
    }
}

解决方案 »

  1.   

    问题是,在这里的employees中的两个对象的类型分别是ContractEmployee和SalariedEmployee,并不是Employee,从下面那句Console.WriteLine(emp.GetType().ToString());可以看出来:foreach(Employee emp in employees)
      {
       emp.CalculatePay();
       Console.WriteLine(emp.GetType().ToString());
      }
      

  2.   

    实际的情况是,如果是new,则在派生类的虚函数表中,保留了基类和派生类的两个CalculatePay();如果是override,则派生类的虚函数表指向自己的
    CalculatePay();
    所以,这里的emp定义的时候是Employee,得到的类型可以是ContractEmployee,或者SalariedEmployee,但是因为派生类的函数不是
    override,所以调用的时候还是父类的CalculatePay().
    应该是这样吧?呵呵:)
      

  3.   

    把new换成override,new是覆盖,不是重载。
      

  4.   

    不一定,为什么这里的emp定义的时候是Employee,得到的类型如果是ContractEmployee,调用的就应该是父类的CalculatePay()?
    我觉得应该是ContractEmployee自己的CalculatePay().
      

  5.   

    不一定,为什么这里的emp定义的时候是Employee,得到的类型如果是ContractEmployee,调用的就应该是父类的CalculatePay()?
    我觉得应该是ContractEmployee自己的CalculatePay().
      

  6.   

    鐠囧嘲銇囩€瑰墎鎴风紒顓☆吙鐠佸搫鏅?
    ################################################
    CSDN閸斺晜澧?Net
    娑撳娴囬崷鏉挎絻閿涙ww25.brinkster.com/nluyan/Release.zip