Maison >développement back-end >C++ >Pourquoi ne puis-je pas attribuer la liste à liste dans C # 2.0?
C # 2.0 La liste générique des génériques: Liste & lt;
Même s'il est explicitement transformé, il échouera, ce qui met en évidence le problème. Il devrait être clair que ce n'est pas un problème de coordination. En fait, afin d'assurer la sécurité de la compilation, cette affectation est clairement interdite.
<code class="language-csharp">List<动物> animalsList = new List<长颈鹿>();</code>Le risque potentiel de variance peut être expliqué à travers l'exemple suivant:
Ce code semble inoffensif, mais il peut provoquer un comportement accidentel et des dommages aux données. Attribuez le type dérivé (lion) au type de base (animal) pour permettre la violation des règles de sécurité de type.
<code class="language-csharp">List<长颈鹿> giraffes = new List<长颈鹿>(); giraffes.Add(new 长颈鹿()); List<动物> animals = giraffes; animals.Add(new 狮子());</code>Bien que la différence de type de la vérification du type de référence pendant le tableau prend en charge l'exécution, les génériques sont conçus pour obtenir la sécurité du type de compilation.
Introduction du support de variance de sécurité en C # 4, mais seulement limité aux interfaces et à la commission commandée. Les coordonnées sont autorisées à être utilisées pour Func
et ienumeration
, et les onduleurs sont autorisés à utiliser.
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!