这是我的问题。
我有两个类都从同一个类继承。即从汽车类继承的汽车类和厢式汽车类。我将它们添加到常见的车辆类型列表中。汽车类具有noofseats属性,而面包车具有weight属性。有没有一种方法可以使用foreach循环遍历它们,并根据它们是car类还是van类来输出?
foreach (van v in vehiclelist)
{
lsttest.Items.Add(v.weight;)
}
foreach (car c in vehiclelist)
{
lsttest.Items.Add(c.nofoseats;)
}
我收到错误消息:“无法将类型为“ Test.Car”的对象转换为类型“ Test.Van”。”
有没有简单的方法可以解决此问题,或者根本不可能?谢谢
最佳答案
对我来说,多态性的全部目的是让我不在乎我的对象到底是什么底层类型。尽管您可以使用此处已经提到的不同方法轻松地检查出哪种类型,但我的答案是完全不要这样做。相反,您应该将不同的行为抽象为一个通用函数,然后调用该方法。快速示例:
class Vehicle
{
abstract public int GetMeasurement();
}
class Car : Vehicle
{
//cars are measured in numberOfSeats
override public int GetMeasurement()
{
return numberOfSeats;
}
private int numberOfSeats;
}
class Van: Vehicle
{
//vans are measured by weight
override public int GetMeasurement()
{
return weight;
}
private int weight;
}
foreach (Vehicle v in vehiclelist)
{
//I don't need to do any type checking:
//polymorphism magically gets the right value for me
lsttest.Items.Add(v.GetMeasurement());
}
这样做的好处是,现在我可以在各地重复使用相同的方法,而不必关心我真正的类型。现在,我可以使用Vehicle进行各种有趣的事情(API等):以后,如果我想添加其他车辆类型,则无需进行任何更改。我创建了一种新的交通工具类型,实现了GetMeasurement()函数,它神奇地起作用了。当您开始购买3、5、15种不同的车型时,您可以在这里轻松看到优势。
关于c# - C#使用foreach遍历包含2个不同对象类的列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20410442/