Maison > développement back-end > C++ > Comment créer une liste de types génériques ouverts (classe) en C# ?

Comment créer une liste de types génériques ouverts (classe) en C# ?

Susan Sarandon
Libérer: 2025-01-11 08:30:10
original
196 Les gens l'ont consulté

How to Create a List of Open Generic Types (Class) in C#?

Comment créer une liste de types génériques ouverts (Class) en C#

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 qui représente différents types de données, tels que StringData et DecimalData. Pour conserver une liste de ces différents types de données, vous pouvez essayer d'utiliser List comme ceci :

<code class="language-c#">List<Data> dataCollection = new List<Data>();</code>
Copier après la connexion

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>
Copier après la connexion

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 et Data. Il s'agit d'une limitation de la conception générique de C#.

Méthodes alternatives

Si vous devez conserver une collection contenant des objets de différents types, vous pouvez envisager les alternatives suivantes :

  • Utilisez des interfaces non génériques ou des classes abstraites pour définir le comportement public et convertir les objets en type approprié si nécessaire.
  • Utilisez la programmation dynamique pour augmenter la flexibilité, mais au détriment de la sécurité du type.
  • Utilisez des bibliothèques tierces pouvant fournir des fonctionnalités génériques plus avancées.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal