참고 :이 비슷하지만, 내가 IBusinessCollection
인터페이스를 구현했습니다ICollection에 - ICollection에 <T> .Count와 ICollection.Count 사이의 모호함
this other question으로 상당히 다릅니다. 그것은 ICollection<T>
, 그리고 구식의 비 일반적인 ICollection
에서 기진 맥진합니다. 난 그냥 오래된 ICollection
을 체포 덤프하는 것을 선호 싶지만, 내가 나를 어쨌든 오래된 부서진 제네릭이 아닌 IList
:-(
을 구현하고 싶은 CollectionView와 WPF의 데이터 바인딩을 사용하고, 인터페이스는 다음과 같다 :
public interface IBusinessCollection<T> : ICollection<T>, ICollection
{ }
public interface ICollection<T>
{ int Count { get; } }
public interface ICollection
{ int Count { get; } }
인해 의존성 삽입 (Dependency Injection)을 사용하여, 나는 그들의 인터페이스, 구체적인 유형으로하지를 사용하여 유형 IBusinessCollection<T>
의 개체 주위에 지나가는거야, 그래서 이런 일이 :
internal class AnonymousCollection : IBusinessCollection<string>
{
public int Count { get { return 5; } }
}
public class Factory
{
public static IBusinessCollection<string> Get()
{ return new AnonymousCollection(); }
}
을
var counter = Factory.Get();
counter.Count; // Won't compile
// Ambiguity between 'ICollection<string>.Count' and 'ICollection.Count'
이 컴파일을하는 3 가지 방법이 있습니다,하지만 그들 모두는 못생긴 : 나는 시도하고이 코드를 호출 할 때 다음과 같이
, 나는 오류가 발생합니다.
여기에 클래스 캐스트는 명시 적으로
ICollection<T>
에 명시 적으로 클래스 캐스트 ICollection
에 클래스 캐스트 (나는 알 수 없습니다) 구체적인 구현
입니다 네가 네 물건을 던지라고 요구하지 않는 네 번째 옵션이 있니? 내가 원하는 변경을 할 수 있습니다. IBusinessCollection<T>
두 인터페이스를 모두 명시 적으로 구현하지 않고 공용 인터페이스를 직접 구현하지 않는 이유는 무엇입니까? 여전히 외부에서 "구현에 반대하는 것이 아니라 인터페이스에 대해 프로그램 할"수 있습니다. –