如何通过自定义多态类型的集合获得多态行为? - c#

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

public class Super{}

public class SubA : Super{}

我想有一个定义Super集合上的某些操作的接口。

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

所以基本上,我希望能够多态传递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}
}

我怎样才能抽象出我的对象的列表(或其他集合类型),以反映组成它们的类型之间的关系?

参考方案

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

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)
    {
        // ...
    }
}

将谓词<T>转换为Func <T,bool> - c#

我有一个包含成员Predicate的类,希望在Linq表达式中使用该类:using System.Linq; class MyClass { public bool DoAllHaveSomeProperty() { return m_instrumentList.All(m_filterExpression); } private IEnumerable&…

客户端反序列化为数组序列化字典<string,string>数据 - c#

我有一个字典,该字典使用C#中的JavaScriptSerializer进行了序列化。在客户端,我有:"{"dd049eda-e289-4ca2-8841-4908f94d5b65":"2","ab969ac2-320e-42e1-b759-038eb7f57178":"5�…

根据激活的Maven配置文件更新战争名称 - java

在pom中,我有两个配置文件。测试1测试2现在,我希望根据激活的配置文件更改战争名称。预期结果激活test1配置文件后,战争名称应为prefix-test1.war。激活test1和test2时,战争名称应为prefix-test1-test2.war。如果没有激活任何配置文件,则战争名称应为prefix.war。我的POM文件....<?xml ve…

为什么要使用Func <string>而不是string? - c#

为什么要使用Func<string>而不是string?我的问题特别是关于this回购。有问题的行是22: private static Func<string> getToken = () => Environment.GetEnvironmentVariable("GitHubToken", Enviro…

构造函数中的Func <T>参数是否会减慢我的IoC解析速度? - c#

我正在尝试提高IoC容器的性能。我们正在使用Unity和SimpleInjector,并且有一个带有此构造函数的类:public AuditFacade( IIocContainer container, Func<IAuditManager> auditManagerFactory, Func<ValidatorFactory> v…