C # Dans le langage de programmation C #, une liste d'objets de classe dérivée à la liste de référence de classe de base déclenchera le problème de la collaboration. Ce problème se produit lorsque la catégorie dérivée n'existe pas dans la classe de base.
Par exemple, considérez le code suivant:
Dans ce code, la liste de l'objet girafe est attribuée à la liste référencée par l'animal. Cependant, cette affectation a échoué pendant la compilation en raison du problème de coordination.
<code class="language-csharp">class Animal { } class Giraffe : Animal { } static void Main(string[] args) { List<Giraffe> giraffes = new List<Giraffe>(); List<Animal> animals = giraffes; // 编译时错误 }</code>
coopération et non -varabilité
Les types génériques C # peuvent être coordonnés ou inchangés. La coordination permet des références de classe de base pour référence aux objets de classe dérivés, tandis que la non-dégénération empêche de telles affectations. Pour la liste, le comportement par défaut est la non-variabilité, ce qui signifie que la liste ne peut pas être affectée à la liste
.
Afin de résoudre ce problème, il existe plusieurs solutions:
Conversion explicite:Le code suivant peut être utilisé pour afficher la liste
pour lister<code class="language-csharp">List<Animal> animals = (List<Animal>)giraffes; // 不推荐,可能导致运行时错误</code>
.convertall pour convertir la liste
pour la liste<code class="language-csharp">List<Animal> animals = giraffes.ConvertAll(g => (Animal)g);</code>
La méthode à choisir dépend de la situation spécifique et des exigences pour la robustesse du code. La méthode ICovariant<out T>
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!