jeudi 4 mars 2010

Variance et ContraVariance en .Net

Quelques articles explicant les principes de Covariance et Contravariance dont l'implémentation est parachevée en C#4.
La Covariance et ContraVariance permet de faire un casting implicite pour supporter les types dérivés ou ancêtre (1*) lors d'appel de méthodes d'interfaces.
La Covariance et Contravariance s'applique également aux assignation de delegate.

(1*) Ce cas est décrit de façon plus claire dans les exemple du second lien.

Soit les classes suivantes:
  • T0 = Actor
  • T1 dérivée de T0 = Person
  • T2 dérivée de T1 = Employe
En utilisant le type <T1> dans une interface générique (ex: IEnumerable<T1>):
la CoVariance implique qu'une fonction Z peut retourner un élément de type T2 (casting implicite).
La contraVaiance indique qu'une fonction Y peut accepter un parametre de type T0 (casting implicite).
Dans les deux cas, si le procédé de CoVariance et ContraVariance n'existait pas, les deux cas décris ci-avant ne compileraient pas (le type alors toléré étant strictement T1).

Je vous invite à consulter les deux articles suivants pour plus d'information.

Aucun commentaire: