나는 내가 무엇을하려고하는지에 대한 이름을 모른다는 것이 확실하다. 그렇지 않으면 내 인터넷 검색이 더 성공적 일 것이다. 나는 현재 같은 명명 된 방법으로 인터페이스에 관련된 결과 만 찾습니다.인터페이스 대 클래스 메서드 매개 변수 모호성
공통 기본 클래스에서 상속 받고 인터페이스를 구현하는 클래스가 몇 개 있습니다. 기본 클래스 또는 인터페이스를 매개 변수로 받아들이는 메소드가 있습니다. 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);
}
}
콘크리트 클래스의 각
각각DoThings()
를 호출 할 객체의 목록에 클래스 관리 LINQ 쿼리가 있습니다. 목표는 실제 클래스
DoThings()
의 실제 구현을 투명하게 유지하는 것입니다.
인터페이스에서 공분산을 시도했지만 첫 번째 코드 경로를 강제 종료하는 A를 상속하는 것을 피할 수 없었습니다.
위의 코드는 실제 구현을 단순화 한 것입니다. A
과및 B
에서 파생 된 4 개의 클래스가 약 10 개 있습니다.
'ConcreteAB'에 대해 어떤 방법으로 호출 할 것으로 기대하십니까? 그리고 왜? – Rob
https://stackoverflow.com/questions/42078610/c-sharp-generic-method-resolution-fails-with-an-ambiguous-call-error/42078735#42078735 – Ryu
@Ryu에서 해당 게시물을 참조하십시오. 제네릭이 작동하지 않는다고 말했습니다. – kskid19