我有课
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,我将陷入无限循环...
最佳答案
我如何检查车辆是否是SpeedCar而不是Car
vehicle.GetType() == typeof(SpeedCar)