Domanda

Non capisco perché IList implementa IEnumerable considerando che IList implementa ICollection che implementa < codice> IEnumerable anche.

È stato utile?

Soluzione

Suppongo che tu voglia sapere perché dichiara di implementare ICollection e IEnumerable , quando il primo implica il secondo. Sospetto che il motivo principale sia la chiarezza: significa che le persone non hanno bisogno di guardare indietro a ICollection per verificare che ciò estenda già IEnumerable .

Ci sono altre volte in cui è necessario dichiarare nuovamente un'implementazione dell'interfaccia, se si desidera reimplementare un metodo di interfaccia che era stato precedentemente esplicitamente implementato in una classe base - ma non penso che sia la ragione in questo caso.

EDIT: suppongo che il codice sorgente da cui sono stati creati i documenti abbia la dichiarazione che include entrambe le interfacce. Un'altra possibile alternativa è che tutte le interfacce nella gerarchia vengano automaticamente inserite dal generatore di documenti. Nel qual caso la domanda diventa "perché il generatore di documenti lo fa" - e la risposta è quasi certamente ancora "chiarezza".

Altri suggerimenti

IList implementa solo IEnumerable per associazione; cioè implementa IEnumerable precisamente perché eredita ICollection che è IEnumerable . Otterresti lo stesso con le gerarchie di tipi (anche se solo una singola eredità:

class Enumerable {}
class Collection : Enumerable {}
class List : Collection {}

quindi List è un enumerabile ; allo stesso modo, IList è IEnumerable .

Ad esempio, se scrivo:

interface IA {}
interface IB : IA { }
interface IC : IB { }

E guarda i metadati, quindi sembra che IC: IA, IB - ma questo è solo indiretto; ecco l'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 dovessi aprire il codice in ReSharper, indicherebbe che la dichiarazione dell'interfaccia IEnumerable su IList non era richiesta, poiché è già specificata tramite ICollection .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top