【发布时间】:2012-09-18 19:04:01
【问题描述】:
我有课
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() 方法然后执行正则表达式,但是如果我重命名我的类,我会破坏我的代码...
换句话说,如果我经过的车辆无法通过并且它恰好是 Car 或 SpeedCar,我将进入无限循环...
【问题讨论】:
标签: c# inheritance polymorphism