【问题标题】:Run same method of each derived type sequentially c#依次运行每个派生类型的相同方法c#
【发布时间】:2016-05-07 02:34:28
【问题描述】:

我有下面的代码,IVehicle 接口有TestDrive 方法。 有一个抽象类——Vehicles,它实现了IVehicle,并有一个属性TestDriveTime

有许多子类,如CarScooter 等(大约有 25 个这样的子类)。它派生自Vehicle 并有自己的TestDrive() 实现。

请帮助我解决我的问题 -

  1. 如果我必须依次运行每个TestDrive,我在Main() 中的代码是否正确?
  2. 如果所有子对象都使用相同的TestDriveTime,我该如何设置?

.

public interface IVehicle 
{  
    void TestDrive();
}

public abstract class Vehicle : IVehicle
{
    public DateTime TestDriveTime { get; set; }
    abstract public void TestDrive();
}

public class Car : Vehicle
{
    public override void TestDrive()
    {
        // code for car testDrive
        // uses TestDriveTime
    }
}

public class Scooter : Vehicle
{
    public override void TestDrive()
    {
        // code for car testDrive
        // uses TestDriveTime same as car
    }
}

static void Main(string[] args)
{
    IVehicle vehicle = null;
    // 1. need to set the TestDriveTime which can be used for vehicles of all types. 

    vehicle = new Car();        
    vehicle.TestDrive();

    // 2. Need to run the TestDrive for all vehicles sequentially

    vehicle = new Scooter();
    vehicle.TestDrive();
}

【问题讨论】:

    标签: c# abstract-class derived-class base-class


    【解决方案1】:

    1) 声明一个列表:

    List<IVehicle> vehicles = new List<IVehicle>();
    

    然后添加您的所有车辆:

    vehicles.Add(new Car());
    vehicles.Add(new Scooter());
    

    并迭代:

            foreach (IVehicle v in vehicles)
                v.TestDrive();
    

    2) 您可以设置 TestDriveTime 并将其用于所有对象:

    v.TestDrive(TestDriveTime);

    将方法声明改为:IVehicle.TestDrive(DateTime testDriveTime)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-04
      • 2014-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-28
      • 2011-02-13
      • 1970-01-01
      相关资源
      最近更新 更多