从基接口集合创建派生接口的通用集合

Create a generic collection of derived interfaces from a collection of base interfaces

我有一个基本界面

public interface IBase
{
    ...
}

以及派生自该基础的接口

public interface IChild : IBase
{
    ...
}

在我的代码中,我调用了一个方法,它将 return 我 List<IBase> (遗留代码)。使用此列表,我试图填写 ObservableCollection<IChild>

List<IBase> baseList= GetListofBase();
ChildList = new ObservableCollection<IChild>();

// how to fill ChildList with the contents of baseList here?

我知道无法从基接口转换为派生接口,但是可以从基接口创建派生实例吗?

对此的简单方法是在您的 child class 中有一个接受 IBase 的构造函数。

public interface IBase
{
}

public interface IChild : IBase
{
}

public class ChildClass : IChild
{
    public ChildClass(IBase baseClass) {
        // Do what needs to be done
    }
}

我希望我已经正确理解了您的问题,因为很难准确找到您要查找的内容。

您不能用 List<IBase> 填充 ObservableCollection<IChild>

由于继承理论规则,您只能用 List<IChild> 填充 ObservableCollection<IBase>

由于 IBase 是 IChild 的缩减版本,类型无法匹配:您无法将 IBase 转换为 IChild。

由于IChild是IBase的扩展版本,类型可以匹配:可以将IChild转换为IBase。

例如,丰田汽车是汽车,但并非所有汽车都是丰田,因此您可以将丰田视为汽车,但不能将汽车视为丰田因为丰田汽车有一些抽象汽车没有的东西和可能性。

查看本教程,此概念对于 类 与接口相同:

What is inheritance

关于继承的维基百科页面:

https://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)