Maison > développement back-end > C++ > Une liste C# peut-elle contenir plusieurs types génériques avec différents paramètres de type ?

Une liste C# peut-elle contenir plusieurs types génériques avec différents paramètres de type ?

Barbara Streisand
Libérer: 2025-01-18 16:32:13
original
438 Les gens l'ont consulté

Can a C# List Hold Multiple Generic Types with Different Type Parameters?

Utiliser une liste C# avec plusieurs types génériques : une solution

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

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

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

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!

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