【发布时间】:2014-02-24 13:36:30
【问题描述】:
在下面的示例中,我希望能够将 StandardCar 或 RaceCar 的实例放入 CarCollection 列表,然后在循环 CarCollection 列表时将它们转换为正确的数据类型。
我知道这在 C# 中是不可能的。但是我找不到不涉及一个类的方法,该类在一个类中具有所有属性。由于 NumberOfRaces 仅适用于 RaceCars,这样设置看起来很混乱吗?
当我浏览该系列时,我会知道我使用的是标准汽车还是赛车。但是目前,使用下面的代码,如果我将 StandardCar 放入列表中,然后遍历该列表并将其转换为 StandardCar,我将得到一个转换异常。
请注意,我实际的最终课程比下面的要复杂得多。
class Car
{
public string Name {get; set;}
}
class RaceCar : Car
{
public int NumberOfRaces {get; set;}
}
class StandardCar: Car
{
public bool ChildrenInCar {get; set;}
}
class CarCollection
{
List<Car> Collection {get; set;}
}
感谢您的帮助。
【问题讨论】:
-
嗯,您可以将
StandardCar和RaceCar的实例放入CarCollection.Collection属性中。是什么让你认为你做不到? -
我不认为我的问题很清楚。我已编辑以提供帮助。我可以把它们放在那个列表中。但我无法遍历列表并将它们投射到 SandardCar 或 RaceCar
-
当然你可以将它们返回到
StandardCar或RaceCar,如果它们属于那种类型。请注意,如果您将单个StandardCar放入列表中,则不能将其转换 到RaceCar。这个问题还不清楚。 -
@james 你不应该这样做。您应该利用多态性,以便在使用列表时,除了基本
Car类型所公开的内容之外,您不需要任何内容。 -
如果你真的有你说的问题,你将
StandardCar类型的对象放入列表中,然后循环遍历列表,将其转换回StandardCar,然后抛出一个例外,请发布一个简短但完整的程序来演示,因为它应该可以正常工作。