Comment créer une liste de types génériques ouverts (Class
En programmation, vous pouvez rencontrer des scénarios dans lesquels vous devez traiter plusieurs types de données dans une collection. Dans ce cas, les génériques peuvent constituer une solution flexible. Cependant, l'utilisation de types génériques ouverts, tels que List, entraîne parfois des erreurs de compilation.
Supposons que vous ayez une classe Data
<code class="language-c#">List<Data> dataCollection = new List<Data>();</code>
Cependant, ce code ne sera pas compilé car le compilateur se plaindra que le type générique "Data" nécessite un paramètre de type. En effet, pour les types génériques ouverts, le compilateur ne peut pas déduire les paramètres de type lors de la construction de la liste.
Comprendre les types génériques ouverts et fermés
Pour résoudre ce problème, il est important de comprendre la différence entre les types génériques ouverts et fermés. Dans le cas de List, il représente un type générique ouvert, ce qui signifie que le paramètre de type T reste non spécifié. D'un autre côté, un type générique fermé spécifie des paramètres de type, tels que List> ou List>.
Créer une liste de type générique fermé
Pour créer une liste d'un type générique fermé, vous devez spécifier les paramètres de type lors de la construction de la liste. Par exemple :
<code class="language-c#">List<Data<string>> stringDataCollection = new List<Data<string>>(); List<Data<decimal>> decimalDataCollection = new List<Data<decimal>>();</code>
Ces listes peuvent désormais accepter respectivement des instances de StringData et DecimalData.
Limitations du polymorphisme de type générique ouvert
Malheureusement, en C#, il n'existe aucun mécanisme direct pour obtenir un véritable polymorphisme des types génériques ouverts. Cela signifie que vous ne pouvez pas créer une liste comme List> et y stocker différents types englobants, tels que Data
Méthodes alternatives
Si vous devez conserver une collection contenant des objets de différents types, vous pouvez envisager les alternatives suivantes :
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!