ienumerable 인터페이스
-
10-07-2019 - |
문제
나는 이유를 이해하지 못한다 IList
구현 IEnumerable
그것을 고려합니다 IList
구현 ICollection
그것을 구현합니다 IEnumerable
또한.
해결책
나는 그것이 왜 그것이 구현되었다고 선언하는지 알고 싶다고 생각합니다. ICollection
만큼 잘 IEnumerable
, 첫 번째가 두 번째를 의미하는 경우. 주된 이유는 명확성이라고 생각합니다. 사람들이 되돌아 볼 필요가 없다는 것을 의미합니다. ICollection
이미 확장 된 것을 확인합니다 IEnumerable
.
인터페이스 구현을 다시 고정 해야하는 경우가 있습니다. 이전에 기본 클래스에서 명시 적으로 구현 된 인터페이스 방법을 다시 구현하려면이 경우 그 이유라고 생각하지 않습니다.
편집 : 문서에서 구축 된 소스 코드에는 두 인터페이스를 포함한 선언이 있다고 가정했습니다. 또 다른 가능한 대안은 모두 계층 구조의 인터페이스는 DOC 생성기가 자동으로 끌어 당깁니다. 어떤 경우에는 질문이 "Doc 생성기가 왜 그렇게 하는가?
다른 팁
IList
구현 만 IEnumerable
협회에 의해; 즉, IT는 구현됩니다 IEnumerable
정확하게 왜냐하면 상속합니다 ICollection
그게 IEnumerable
. 유형 계층 구조와 동일하게 얻을 수 있습니다 (단일 상속 만 :
class Enumerable {}
class Collection : Enumerable {}
class List : Collection {}
그래서 List
이다 Enumerable
; 같은 방법으로, IList
~이다 IEnumerable
.
예를 들어, 내가 쓰면 :
interface IA {}
interface IB : IA { }
interface IC : IB { }
그리고 메타 데이터를 보면 IC : IA, IB
- 그러나 이것은 간접적 일뿐입니다. IL은 다음과 같습니다.
.class private interface abstract auto ansi IA
{
}
.class private interface abstract auto ansi IB
implements IA
{
}
.class private interface abstract auto ansi IC
implements IB, IA
{
}
Resharper에서 코드를 열면 IEnumerable
인터페이스 선언 켜짐 IList
이미 지정되어 있으므로 필요하지 않았습니다 ICollection
.