2012-03-12 5 views
1

의 열거 I 클래스 다음과 같이 있습니다공분산 - 인터페이스

public partial class GmxGlobalList : DynamicBindingListBase<GmxGlobal> 

어디 IEnumerable<T>에서 확장 DynamicBindingListBase 구현 Collection<T> -이 경우 IEnumerable<GmxGlobal>에. 내가

public partial class GmxGlobalList : DynamicBindingListBase<GmxGlobal>, IEnumerable<IGmxGlobal> 

같은 GmxGlobalList을 선언 이제 원하는

public partial class GmxGlobal : IGmxGlobal 

같은 클래스 GmxGlobal

을 정의하지만이 방법 IEnumerator<IGmxGlobal> GetEnumerator()를 선언해야하기 때문에이 작동하지 않습니다 - 그러나 이것은 이미 구현 Collection<T>에서 - IGmxGlobal이 아니라 GmxGlobal으로 표시됩니다. 나는 왜 당신에게 묻겠습니다. 왜 IEnumerator<IGmxGlobal> GetEnumerator()을 구현해야합니까? - GmxGlobalList가 IEnumerable 또는 ICollection 또는 IListIGmxGlobal (또는 기타 IGmxGlobal이 열거 될 수있는 다른 것)이라고 알릴 수있는 것은 무엇을해야합니까?

+0

Base가 DynamicBindingListBase 이면 충분하지 않습니까? 왜 IEnumerable이 필요한가요? – Tigran

+0

GmxGlobalList는 IEnumerable 을 정의합니다. IGmxGlobalList 인터페이스도 구현합니다. 자,이 인터페이스 (IGmxGlobalList) IEmumerable 구현하기 때문에 나는 또한 IGmxGlobalList 것으로 알고있는 GmxGlobalList 개체를 사용해야하고 또한 어디에만 IGmxGlobal 및 GmxGlobal 알 수있는 열거합니다. 이를 위해 IGmxGlobalList : IEnumerable 을 선언해야합니다. – BennoDual

답변

1

DynamicBindingListBase<T> 이후 구현 IEnumerable<T>DynamicBindingListBase<GmxGlobal>GmxGlobalList로부터 상속 IEnumerable<IGmxGlobal>을 구현한다.
GmxGlobalListIEnumerable<GmxGlobal>IEnumerable<IGmxGlobal>을 모두 구현합니다.

DynamicBindingListBase<T>에는 이미 IEnumerable<T>의 구체적인 구현이 있다고 가정합니다. IEnumerable<IGmxGlobal>의 범위가 IEnumerable<GmxGlobal>이므로이 구현은 IEnumerable<IGmxGlobal>으로 작동하지 않습니다. 당신이 있다면

바로 다음이합니다 :

GmxGlobalList : DynamicBindingListBase<GmxGlobal> 

인해되고 공동 변형 IEnumerable에, 이미 IEnumerable<IGmxGlobal>GmxGlobalList를 사용할 수 있습니다. 이처럼 당신이 정말로 IEnumerable<IGmxGlobal>을 구현해야하는 경우

IEnumerable<IGmxGlobal> foo = new GmxGlobalList(); 

당신은 주위 DynamicBindingListBase<GmxGlobal>을 래핑하는 구현 세부 사항을 작성할 수 있습니다.

public IEnumerator<IGmxGlobal> GetEnumerator() 
{ 
    return (base as IEnumerator<GmxGlobal>).GetEnumerator(); 
} 

IEnumerator IEnumerable.GetEnumerator() 
{ 
    return GetEnumerator(); 
} 
0

이 방법이 유용합니까?

IEnumerable<IGmxGlobal> e = (IEnumerable<GmxGlobal>)instanceOfGmxGlobalList;