Dire que j'ai ces deux interfacesnon générique Contravariance
public interface A
{
}
public interface B
{
A a {get;}
}
Et ces deux types de béton
public class ConcreteA : A
{
}
public class ConcreteB : B
{
public ConcreteA a {get;}
}
Cela ne compile pas parce que l'interface B attend une interface A au lieu d'un ConcreteA.
Actuellement, je génère automatiquement du code avec des interfaces, et je suis tombé sur ce senario. Au lieu de modifier tous mes modèles à implémenter et Définition d'interface explicite dans laquelle retournerait la version d'interface de ma classe concrète, je voudrais le faire en utilisant une version de covariance, mais je ne suis pas sûr s'il y a un moyen de le faire ceci ou si c'est une limitation de C#.
Existe-t-il une version interface de contravariance qui me permettrait de faire cela?
1.1 S'il n'y a pas une raison explicite pour laquelle ceci n'est pas implémenté, ou y a-t-il un senario dans lequel serait problématique si cela était implémenté?
Vous avez besoin de génériques, car 'B b = new ConcreteB();' vous permet de définir 'a' sur tout ce qui implémente' A', pas seulement 'ConcreteA'. – juharr
@juharr, merci, j'ai regardé ça. Supposons que vous ayez seulement eu l'interface qui pourrait encore être fait mais que ce serait une utilisation de niche spécifique –