读书人

virtual~小弟我理解错了吗

发布时间: 2012-02-05 12:07:14 作者: rapoo

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

读书人网 >C#

热点推荐