-1

次のような典型的な階層があるとしましょう。

ここに画像の説明を入力

私が望むのは、すべてのクラスに特定の move() 実装を持たせることです。したがって、次のコードがある場合:

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

実行時の v のクラスに応じて、対応する move() 実装に対して呼び出しを行う必要があります。

私は virtual と override を試しましたが、 RedCar インスタンスで move() を呼び出すと、 Car.move() にジャンプします (これは Vehicle の下の次のオーバーライドであるためだと思います)

どのように行うことができますか?

4

1 に答える 1

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();
        }
    }
}
于 2013-08-10T00:31:20.423 に答える