我有以下代码:
简单类
public class Transport { }
public class Car : Transport { }
public class Bus : Transport { }包装器类
public class Wrapper<T> where T : Transport
{
public T Vehicle { get; set; }
public void Brake() { }
public void Accelerate() { }
}
public class BusWrapper : Wrapper<Bus>
{
public void PickupPassenger() { }
}
public class CarWrapper : Wrapper<Car>
{
public void GoRacing() { }
}这就是我正在尝试的,它给了我编译错误:
List<Wrapper<Transport>> list = new List<Wrapper<Transport>>();
list.Add(new CarWrapper());
list.Add(new BusWrapper());
list.ForEach(wrapper =>
{
wrapper.Accelerate();
if (wrapper is CarWrapper)
((CarWrapper)wrapper).GoRacing();
else if (wrapper is BusWrapper)
((BusWrapper)wrapper).PickupPassenger();
wrapper.Brake();
});误差
cannot convert from 'CarWrapper' to 'Wrapper<Transport>'
cannot convert from 'BusWrapper' to 'Wrapper<Transport>'问题
我在这里做错了什么,为我想要达到的目标做些什么。
提前谢谢。
发布于 2012-10-04 02:49:41
您错误地假设如果Car从Transport继承,那么Wrapper<Car>也从Wrapper<Transport>继承。事实并非如此。
您需要定义IWrapper<out T>并将其用于列表。这样的协方差就可以工作了。
https://stackoverflow.com/questions/12719564
复制相似问题