接口与类方法参数模糊

时间:2017-12-11 02:57:24

标签: c# methods interface ambiguous

我确信我根本就不知道我要做什么的名字,否则我的谷歌搜索会更成功。我目前只找到与具有相同命名方法的接口有关的结果。

我有一些继承自公共基类的类,有些实现了接口。我有接受基类或接口作为参数的方法。我无法编译,因为这会导致错误

  

以下方法或属性之间的调用是不明确的:在ConcreteExecutionClass中调用DoThings(IQueryable< A>)和DoThings(IQueryable< B>)`。

此外,泛型不会起作用,因为泛型的类型约束不会产生唯一的方法签名。

是否有办法(或可接受的模式)根据参数类型强制执行特定方法?

public abstract class A {
    // some properties
}

public class ConcreteA : A {
    // full implementation
}

public interface B {
    // a property
}

public class ConcreteAB : A, B {
    // full implementation
}

public abstract class ExecutionClass {
    public IQueryable<A> DoThings(IQueryable<A> content){
        return A.method().AsQueryable();
    }

    public IQueryable<B> DoThings(IQueryable<B> content){
        return B.interfaceRequiredMethod().method().AsQueryable();
    }
}

public class ConcreteExecutionClass : ExecutionClass {
    public void Program(){
        var objectList = new List<ConcreteAB>{/*....*/};
        DoThings(objectList);
    }
}

每个具体类都有一个类来管理对象列表上的linq查询,每个对象都调用DoThings()。目标是使DoThings()的实际实现对具体类保持透明。

我尝试在界面中进行协方差,但是无法避免继承A强制执行第一个代码路径。

上面的代码是对实际实现的简化。大约有10个类派生自A,4个派生自AB

1 个答案:

答案 0 :(得分:0)

我只是创建了一个抽象层次结构,其中抽象A是基础,并且有2个抽象类继承自它。

相关问题