日期:2014-05-19  浏览次数:20680 次

virtual~~~~我理解错了吗?
class   Car
{
public   virtual   void   DescribeCar()
{
System.Console.WriteLine( "A ");
}
}

class   ConvertibleCar   :   Car
{
public   new   virtual   void   DescribeCar()
{
base.DescribeCar();
System.Console.WriteLine( "B ");
}
}

class   Minivan   :   Car
{
public   override   void   DescribeCar()
{
base.DescribeCar();
System.Console.WriteLine( "C ");
}
}
public   class   TT
{
public   static   void   TestCars()
{
Car[]   cars   =   new   Car[3];
cars[0]   =   new   Car();
cars[1]   =   new   ConvertibleCar();
cars[2]   =   new   Minivan();

foreach   (Car   vehicle   in   cars)
{
System.Console.WriteLine(vehicle.GetType());
vehicle.DescribeCar();
}


}
public   static   void   Main()
{
TestCars();
     
}
              }
输出的结果是:
TT.Car
A
TT.ConvertibleCar
A
TT.Minivan
A
C

请问第二个明明指向的是ConvertibleCar这个引用实例,为什么调的确实基类里面的方法?

------解决方案--------------------
用的是new virtual 而不是override所一调用的是父类的方法
------解决方案--------------------
加上了new的方法,都是在本类型中不会调用基类的方法,相当于是一个新的方法.
但是如果被(强制)转换成了基类的类型,那么系统会不理会这个被new的了新的方法.