如何使用自定义多态类型的集合获得多态行为?

Arc*_*ird 2 c# collections polymorphism abstraction

我有一个超类,Super有一个子类SubA

public class Super{}

public class SubA : Super{}
Run Code Online (Sandbox Code Playgroud)

我想要一个接口来定义对Super.

public interface IDoer
{
    List<Super> GetObjects();
    void SaveObjects(List<Super> items);
}
Run Code Online (Sandbox Code Playgroud)

所以基本上,我希望能够多态地传递 的集合Supers,但List<SubA>不是List<Super>. 所以我的 subADoer 没有实现 IDoer。

public class SubADoer : IDoer
{
    public List<SubA> GetObjects{ return new SubA()}
    public void SaveObjects(List<SubA> items){//save}
}
Run Code Online (Sandbox Code Playgroud)

我如何抽象对象的列表(或其他一些集合类型)来反映构成它们的类型之间的关系?

Eni*_*ity 6

您需要使用泛型,如下所示:

public interface IDoer<T> where T : Super
{
    List<T> GetObjects();
    void SaveObjects(List<T> items);
}

public class SubADoer : IDoer<SubA>
{
    public List<SubA> GetObjects()
    {
        // ...
    }

    public void SaveObjects(List<SubA> items)
    {
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)