Interface ienumerable
-
10-07-2019 - |
Pergunta
Eu não entendo porque IList
implementos IEnumerable
levando em consideração que IList
implementos ICollection
isso implementa IEnumerable
também.
Solução
Presumo que você queira saber por que declara que implementa ICollection
assim como IEnumerable
, quando o primeiro implica o segundo. Eu suspeito que o principal motivo é clareza: significa que as pessoas não precisam olhar para trás para ICollection
Para verificar isso que já se estende IEnumerable
.
Existem outros momentos em que você precisa redeclar uma implementação de interface, se você deseja implementar um método de interface que foi implementado anteriormente em uma classe base - mas não acho que seja esse o motivo neste caso.
EDIT: Eu tenho assumido que o código -fonte da qual os documentos são construídos tem a declaração, incluindo ambas as interfaces. Outra alternativa possível é que tudo As interfaces na hierarquia são automaticamente puxadas pelo gerador DOC. Nesse caso, a pergunta se torna "por que o gerador do DOC faz isso" - e a resposta é quase certamente ainda "clareza".
Outras dicas
IList
Apenas implementos IEnumerable
por Associaton; ou seja, implementa IEnumerable
precisamente Porque herda ICollection
qual é IEnumerable
. Você obteria o mesmo com hierarquias de tipo (embora apenas herança única:
class Enumerable {}
class Collection : Enumerable {}
class List : Collection {}
assim List
é um Enumerable
; do mesmo jeito, IList
é IEnumerable
.
Por exemplo, se eu escrever:
interface IA {}
interface IB : IA { }
interface IC : IB { }
E olhe para os metadados, então parece que IC : IA, IB
- Mas isso é apenas indireto; Aqui está o 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
{
}
Se você abrisse o código em Resharper, indicaria que o IEnumerable
Declaração de interface em IList
não era necessário, pois já está especificado via ICollection
.