gpt4 book ai didi

C# 无法从 `Inherited Class` 转换为 `Base Class`

转载 作者:太空宇宙 更新时间:2023-11-03 11:15:42 24 4
gpt4 key购买 nike

我有以下代码:

简单类

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>'

问题

我在这里做错了什么,我想在这里实现的任何解决方法。

提前致谢。

最佳答案

你错误地假设如果 Car继承自 Transport然后 Wrapper<Car>也继承自 Wrapper<Transport> .它没有。

你需要定义IWrapper<out T>并将其用于您的列表。那么这种协方差就可以起作用了。

关于C# 无法从 `Inherited Class` 转换为 `Base Class`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12719564/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com