Merci à tous pour le shout-outs, les gars.
Jon et Rasmus réponses sont beaux, je voudrais juste ajouter une rapide note technique.
Lorsque l'on parle de façon décontractée et informelle, oui, les gens utilisent "covariance" et "la contravariance" pour désigner un type spécifique de polymorphisme. C'est le type de polymorphisme où vous traiter une séquence d'araignées comme s'il s'agissait d'une séquence d'animaux.
Étions-nous pour obtenir tous les ordinateur-sciency et essayer de faire plus de la définition technique, alors je n'aurais probablement pas dire que la covariance et la contravariance sont "une sorte de polymorphisme". Je l'approche plus technique de définition comme ceci:
Tout d'abord, je voudrais noter qu'il existe deux types de polymorphisme en C# que vous pourriez être en train de parler, et il est important de ne pas les confondre.
Le premier type est appelé traditionnellement "ad hoc polymorphisme", et c'est le polymorphisme où vous avez une méthode M(Animal x), et vous passez des araignées et des girafes et des wallabies, et la méthode uniformément traite ses passée en arguments de la même façon en utilisant les points communs garanti par l'Animal de la classe de base.
Le deuxième type est appelé traditionnellement "polymorphisme paramétrique", ou "générique polymorphisme". C'est la capacité de faire une méthode générique M<T>(T t)
et ensuite avoir un tas de code dans la méthode de nouveau, traite l'argument de manière uniforme basé sur les points communs garanti par les contraintes sur les T.
Je pense que vous parlez du premier type de polymorphisme. Mais mon point est simplement que nous pouvons définir polymorphisme comme la capacité d'un langage de programmation pour traiter les différentes choses de manière uniforme basé sur une communauté. (Par exemple, un type de base, ou connu de mise en œuvre de l'interface.)
La Covariance et la contravariance est la capacité d'un langage de programmation pour profiter de points communs entre les types génériques en déduit connu les points communs de leurs arguments de type.