Comprendre les contraintes génériques dans le casting
Les génériques fournissent un mécanisme puissant pour la programmation sécurisée par type en C#. Cependant, il existe certaines limitations liées au casting lorsqu'il s'agit de classes héritées et de classes de base.
Considérons l'exemple suivant :
public abstract class EntityBase { } public class MyEntity : EntityBase { } public abstract class RepositoryBase<T> where T : EntityBase { } public class MyEntityRepository : RepositoryBase<MyEntity> { }
Dans ce scénario, tenter de convertir un MyEntityRepository en un RepositoryBase
Explication :
MyEntityRepository n'est pas une classe de base de RepositoryBase
Impact de la variance générique :
La variance générique fait référence à la capacité des types génériques à traiter les relations de sous-type et de supertype. En C#, la covariance et la contravariance génériques sont prises en charge dans une mesure limitée. Cependant, dans ce cas, la covariance n'est pas applicable car la classe de base n'est pas un sous-type de la classe dérivée.
Solution possible :
Malheureusement, il n'existe pas de moyen de convertir un MyEntityRepository en un RepositoryBase
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!