我确信我根本就不知道我要做什么的名字,否则我的谷歌搜索会更成功。我目前只找到与具有相同命名方法的接口有关的结果。
我有一些继承自公共基类的类,有些实现了接口。我有接受基类或接口作为参数的方法。我无法编译,因为这会导致错误
以下方法或属性之间的调用是不明确的:在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个派生自A
和B
。
答案 0 :(得分:0)
我只是创建了一个抽象层次结构,其中抽象A是基础,并且有2个抽象类继承自它。