我有课
Interface IVehicle
{
int numberOfWheels;
bool CanCross(string obstacle);
// etc
}
class Car : IVehicle
{
public int numberOfWheels = 4;
public bool CanCross(string obstacle)
{
switch(obstacle)
{
case "river":
return false;
case "grass":
return true;
// etc
}
}
}
class RaceCar: Car
{
public int numberOfWheels = 4;
public bool CanCross(string obstacle)
{
switch(obstacle)
{
case "river":
return false;
case "grass":
return false;
// etc
}
}
}
然后我有方法:
public object Foo(IVehicle vehicle, string obstacle)
{
if(vehicle.CanCross(obstacle)==false)
{
if(vehicle is Car)
return Foo(new RaceCar(), obstacle);
else if(vehicle is RaceCar)
return Foo(new OldCar(), obstacle);
// etc
else
return null;
}
// implementation
return someObject;
}
请注意,如果车辆无法越过障碍物,我会再次递归调用相同的方法以尝试使用不同的车辆。我的问题是为什么如果 vehicle = SpeedCar 然后if (vehicle is Car)
评估为true?可能是因为它继承自它。我如何检查车辆是否是 SpeedCar 而不是 Car。我现在可以调用 ToString() 方法然后执行正则表达式,但是如果我重命名我的类,我会破坏我的代码......
换句话说,如果我通过的车辆无法通过并且它恰好是汽车或 SpeedCar,我将进入无限循环......