如何调用特定对象的重写方法?

时间:2013-08-10 00:13:38

标签: c# inheritance method-overriding

假设我有一个典型的层次结构:

enter image description here

我想要的是为每个类都有一个特定的move()实现。如果我有下一个代码:

List<Vehicle> vehicles = GetVehicles();
foreach (Vehicle v in vehicles) 
{
    v.move(); 
}

必须根据运行时的v类

对相应的move()实现进行调用

我尝试使用虚拟和覆盖但是如果我在RedCar实例中调用move(),它会跳转到Car.move()(我猜这是因为是Vehicle下的下一个覆盖)

任何线索怎么办?

1 个答案:

答案 0 :(得分:2)

这是一个有效的示例代码。我有这个代码方便,所以想发布它。

public class Vehicle
{
    public virtual void Move()
    {
        Console.WriteLine("Vehicle Moving");
    }
}
public class Car : Vehicle
{
    public override void Move()
    {
        Console.WriteLine("Car Moving");
    }
}

public class RedCar : Vehicle
{
    public override void Move()
    {
        Console.WriteLine("Red car Moving");
    }
}

class Program
{

    static void Main(string[] args)
    {
        var vehicles = new List<Vehicle>
            {
                new RedCar(), new Car(),new Vehicle()
            };
        foreach (var vehicle in vehicles)
        {
            vehicle.Move();
        }
    }
}