Pourquoi les homologues génériques d'Ilist et d'Icollection n'ont-ils pas le même ensemble de méthodes?

StackOverflow https://stackoverflow.com/questions/5983043

Question

Existe-t-il une raison particulière à la raison pour laquelle les homologues génériques de IList et ICollection Vous n'avez pas le même ensemble de méthodes et de propriétés? Ils semblent les avoir déplacés.

Ex.IList<T> a

int IndexOf(T item);
void Insert(int index, T item);
void RemoveAt(int index);
T this[int index] { get; set; }

Mais IList a

int Add(object value);
void Clear();
bool Contains(object value);
int IndexOf(object value);
void Insert(int index, object value);
void Remove(object value);
void RemoveAt(int index);
bool IsFixedSize { get; }
bool IsReadOnly { get; }
object this[int index] { get; set; }
Était-ce utile?

La solution

IList<T> met en oeuvre ICollection<T>, donc au moins dans le contexte d'un IList<T> Peu importe quelle interface a quoi. En ce qui concerne pourquoi, qui sait ce qui se passe dans l'esprit de cette équipe .NET folle. Cependant, il semble logique qu'une "collection" nécessite les méthodes pour ajouter, supprimer, vérifier son contenu, etc. tant que ces méthodes ne sont pas dans le contexte d'une "liste" indexée. Une fois que vous commencez à parler d'une liste conceptuelle, vous ajoutez l'indexation, qui nécessite l'indexeur lui-même et les méthodes sensibles à l'index pour ajouter, supprimer et vérifier les éléments.

Autres conseils

Je pense que la principale décision de conception est venue au fait que les tableaux dans .NET en fait tous implémentent IList<T> implicitement. Bon nombre des méthodes de IList tel que Remove et Clear Ne s'appliquez pas aux tableaux afin qu'ils aient été déplacés vers une autre interface.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top