2009-10-12 2 views
5

참고 :이 비슷하지만, 내가 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 가지 방법이 있습니다,하지만 그들 모두는 못생긴 : 나는 시도하고이 코드를 호출 할 때 다음과 같이

, 나는 오류가 발생합니다.

  1. 여기에 클래스 캐스트는 명시 적으로 ICollection<T>

에 명시 적으로 클래스 캐스트 ICollection

  • 에 클래스 캐스트 (나는 알 수 없습니다) 구체적인 구현

  • 입니다 네가 네 물건을 던지라고 요구하지 않는 네 번째 옵션이 있니? 내가 원하는 변경을 할 수 있습니다. IBusinessCollection<T>

  • +0

    두 인터페이스를 모두 명시 적으로 구현하지 않고 공용 인터페이스를 직접 구현하지 않는 이유는 무엇입니까? 여전히 외부에서 "구현에 반대하는 것이 아니라 인터페이스에 대해 프로그램 할"수 있습니다. –

    답변

    9

    빠른 테스트에서 문제를 해결하는 것으로 보입니다.

    public interface IBusinessCollection<T> : ICollection<T>, ICollection 
    { 
        new int Count { get; } 
    } 
    
    +0

    이것은 완벽하게 작동합니다. 감사! –

    +1

    추 신 : 당신이 인터페이스에서 '새로운'일을 할 수 있다는 것을 몰랐습니다. 멋지다 :-) –

    -1
    ICollection<string> counter = Factory.Get(); 
    counter.Count; // No longer ambiguous 
    
    +0

    이것이 실제로 문제를 해결한다고 생각하지 않습니다. 내 샘플 코드에서, 나는'var' 또는 명백한'IBusinessCollection '유형과의 모호성 오류를 얻는다. – bobbymcr

    +0

    질문은 네 번째 옵션을 요청했습니다. 그는 이미이 가능성에 대해 알고있었습니다. –

    +0

    나는 아직도 모호함을 잘못 느낀다. –