Maison >développement back-end >C++ >Une liste C# peut-elle contenir plusieurs types génériques avec différents paramètres de type ?
Le défi réside dans la création d'une liste C# capable de contenir plusieurs types génériques avec différents paramètres de type au sein de la même liste. Considérons une classe Metadata<T>
limitée aux types valeur. Le but est de créer une liste pouvant stocker des objets Metadata<int>
, Metadata<bool>
et Metadata<double>
simultanément.
Utiliser directement une liste de Metadata<T>
n'est pas possible car T
doit être un type unique et concret. Cependant, une solution utilisant l'héritage offre une approche pratique.
Solution utilisant l'héritage :
Cette approche introduit une classe de base abstraite Metadata
et en dérive des classes spécialisées comme Metadata<T>
.
<code class="language-csharp">public abstract class Metadata { } public class Metadata<T> : Metadata where T : struct { private T mDataType; // ... other members ... }</code>
Maintenant, une liste de la classe de base abstraite Metadata
peut être créée :
<code class="language-csharp">List<Metadata> metadataObjects = new List<Metadata>();</code>
Cette liste peut désormais accueillir des instances de différents Metadata<T>
types :
<code class="language-csharp">metadataObjects.Add(new Metadata<int>()); metadataObjects.Add(new Metadata<bool>()); metadataObjects.Add(new Metadata<double>());</code>
Cela résout élégamment le problème en fournissant un type commun (Metadata
) pour la liste tout en permettant des implémentations spécifiques à un type via l'héritage. L'accès au T
spécifique dans chaque objet nécessiterait de revenir au type Metadata<T>
approprié. Il s'agit d'un modèle courant lorsqu'il s'agit de polymorphisme et de types génériques en C#.
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!