C# 9 – Renforcement de la covariance

Avec le langage C#, lorsqu’une classe hérite d’une classe, il est possible de redéfinir une méthode ou une propriété dans la classe dérivée, si elle est déclarée abstraite ou virtuelle dans la classe de base. Cependant, jusqu’à la version 8, il n’est pas possible de modifier sa signature. La version 9 du langage C# renforce la covariance en permettant de modifier le type de retour, à condition qu’une conversion soit possible entre le type choisi vers le type de la classe de base.
Voici un exemple :
Diagramme de classes
Dans la Product, la méthode Order permet de créer une commande d’un produit. Elle a la signature suivante :
public abstract ProductOrder Order(int aQuantity);

Etant donné que la même méthode dans la classe Music retourne une instance de la classe MusicOrder, nous pouvons écrire :
public override MusicOrder Order(int aQuantity) => new MusicOrder(aQuantity, this);

De même, dans la classe Book :
public override BookOrder Order(int aQuantity) => new BookOrder(aQuantity, this);

Dans ces deux classes, le type de retour de la méthode Order a été modifié afin de typer plus fortement le type de retour de cette méthode.

Étiquettes : ,

About: James RAVAILLE

Travaillant avec la plateforme Microsoft .NET depuis 2002, j'alterne les missions de formation et d'ingénierie avec cette plateforme. J'écris ce blog pour transmettre mes connaissances à tout développeur, qu'il soit débutant ou expérimenté.