Pourquoi le tableau met en œuvre IList?

Voir la définition de Système.Tableau classe

public abstract class Array : IList, ...

Théoriquement, je devrais être capable d'écrire ce peu et être heureux

int[] list = new int[] {};
IList iList = (IList)list;

Je doit aussi être capable d'appeler n'importe quelle méthode de la iList

 ilist.Add(1); //exception here

Ma question n'est pas pourquoi j'obtiens une exception, mais plutôt pourquoi le Tableau met en œuvre IList?

  • Bon question. Je n'ai jamais aimé l'idée de la graisse interfaces (c'est le terme technique pour ce type de conception).
  • Le réel (mieux) la question serait pourquoi il prend en charge IList<T>. IList est l'héritage.
  • Comment pensez-vous qu'il rompt de substitution? Je pense qu'il ne l'est pas. Voir Brians réponse.
  • voir: blogs.msdn.com/b/bclteam/archive/2004/11/19/267089.aspx
  • Quelqu'un se soucient réellement de LSP? Il semble tout à fait académique pour moi.
  • ensuite, vous avez besoin de travailler avec de plus grandes bases de code. Mise en œuvre d'un comportement (héritant de l'interface) et puis tout simplement en ignorant les choses que vous n'aimez pas/ne peut pas soutenir conduit à malodorante, occulté, moulage et enfin: code bogué.
  • Vous devez mettre de la complexité quelque part. Disons que vous avez une méthode qui permet de trier un membre de sa catégorie. Avec un seul IList<> interface, vous pouvez vérifier IsReadOnly pour voir si vous pouvez les trier. Si vous avez séparé IRWList<> et IReadList<> interfaces, ce type de faire le membre de votre classe? Vous ne pouvez pas utiliser IRWList<> car alors il ne pouvait pas se tenir en lecture seule des objets, de sorte que vous avez à faire un IReadList<> et puis jeté à IRWList de faire votre tri. Voir -- malodorante, occulté casting.
  • son la collection qui implique la mutabilité pas ses entités qu'elle contient. Vous pouvez faire de votre membre de la classe d'un type qui implémente à la fois IRWList<>, et IReadList<>, utiliser si comme IRWList<> en interne dans votre classe et de l'exposer comme IReadList. Oui, vous avez à mettre de la complexité de quelque part, mais je ne vois pas comment cela s'applique à méconnaître LSP comme un très bon principe de conception (ne savaient pas au sujet de la propriété IsReadOnly bien que ce qui rend IList plus complexe à partir d'un point de vue des consommateurs)

InformationsquelleAutor oleksii | 2011-05-11