Si je comprends bien, c # /. Les génériques nets appuient un certain degré de réification. Donc, si j'ai le code suivant:
List<int> list = new List<int>(); list.Add(1);
4 Réponses :
.NET Les génériques sont spécialisés pour les structures, il n'y a donc pas de boxe requise dans votre cas. Notez qu'il n'y a pas besoin de casting aussi de toute façon. P>
Non, ce ne sera pas en boîte. Au moment de l'exécution, la matrice de support pour la liste Par exemple, si vous écrivez: p> int [] code>. Notez que ce n'est que le cas avec des types primitifs authentiques - Liste LISTE LISTE object list = new List<string>();
Type type = list.GetType();
Les valeurs int code> ne seront pas en boîte dans la liste. C'est l'une des beautés des génériques, que le compilateur (plus spécifiquement le compilateur JIT, je pense) construira une version typée em> de la liste <> code> classe, plutôt que de stocker les valeurs comme objet code>. Il fait donc non seulement appliquer la sécurité de type à travers les méthodes et les propriétés exposées, mais elle est véritablement typée dans tous les aspects. p>
Comme d'autres l'ont noté, la gestère génère un nouveau code pour chaque construction impliquant un nouveau type de valeur. Un point intéressant non encore mentionné jusqu'à présent est que la gestère générera du code une fois em> pour une construction de type de référence et réutiliser que pour tous les types de référence em>. Le code de Cela pourrait sembler fou, mais rappelez-vous que les génériques ne sont pas des modèles. Au moment où le code de l'organisme de méthode générique IL est émis, une résolution de surcharge et une autre analyse sémantique pertinente est déjà fait em> par le compilateur C #. p> list
Cependant, un appel à, dire, nouveau t [10] code> créera toujours le bon type de matrice, même pour les types de référence.