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的了新的方法.