0Pricing
C# Academy · Leçon

Classes génériques

Types de conteneurs réutilisables.

Classes génériques est une leçon C# Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C# Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C# Academy comprend 4 leçons au total.

Qu'est-ce qu'une classe générique ?

Une classe générique déclare un ou plusieurs paramètres de type entre chevrons après le nom de la classe. Ces paramètres peuvent être utilisés pour les champs, les propriétés, les signatures de méthode et les types de retour dans toute la classe.

Vous pouvez ainsi écrire un conteneur ou un service qui fonctionne avec de nombreux types d'éléments tout en conservant un typage fort.

class Box<T>
{
    public T Value { get; set; }
}

Construire une classe générique

Pour créer une instance, vous fournissez un argument de type concret. Box<int> et Box<string> sont des types construits distincts.

Chaque type construit se comporte comme si son T était remplacé partout par le type réel.

using System;

class Box<T> { public T Value { get; set; } }

class Program
{
    static void Main()
    {
        var b = new Box<int> { Value = 7 };
        Console.WriteLine(b.Value);
    }
}

Champs et propriétés génériques

Les paramètres de type peuvent servir de type aux champs et aux propriétés. Une pile, une file ou un cache stocke souvent ses données dans un tableau ou une liste de T.

Le stockage interne reste sûr du point de vue du typage, sans conversion explicite.

class Pair<T>
{
    public T First;
    public T Second;
}

Plusieurs paramètres de type

Une classe peut accepter plusieurs paramètres de type. Un type représentant une paire clé-valeur ou organisé comme un dictionnaire en utilise généralement deux.

Des noms descriptifs tels que TKey et TValue améliorent la lisibilité lorsqu'il y en a plusieurs.

class Entry<TKey, TValue>
{
    public TKey Key { get; set; }
    public TValue Value { get; set; }
}

Une pile générique simple

Voici une petite pile générique reposant sur une List<T>. Push ajoute un élément à la fin et Pop le retire de la fin.

La même classe convient aux entiers, aux chaînes ou à tout type référence ou valeur.

using System;
using System.Collections.Generic;

class MyStack<T>
{
    private readonly List<T> items = new();
    public void Push(T item) => items.Add(item);
    public T Pop()
    {
        var i = items[^1];
        items.RemoveAt(items.Count - 1);
        return i;
    }
}

class Program
{
    static void Main()
    {
        var s = new MyStack<string>();
        s.Push("a");
        s.Push("b");
        Console.WriteLine(s.Pop());
    }
}

Méthodes génériques dans des classes génériques

Une classe générique peut également déclarer des paramètres de type supplémentaires sur certaines méthodes. Ces paramètres propres aux méthodes sont indépendants de ceux de la classe.

Cela apporte davantage de souplesse, par exemple pour convertir le type stocké en un autre type.

class Box<T>
{
    public T Value;
    public TOut Map<TOut>(Func<T, TOut> f) => f(Value);
}

Contraintes sur la classe

Comme les méthodes, une classe générique peut imposer des contraintes à ses paramètres de type avec where. Une contrainte s'applique à chaque membre qui utilise ce paramètre.

Ci-dessous, where T : class autorise l'affectation de null et les comparaisons de références.

class Repository<T> where T : class
{
    private T current;
    public bool IsEmpty => current is null;
}

Les membres statiques sont propres à chaque type

Chaque type générique construit reçoit sa propre copie de tous les champs statiques. Counter<int> et Counter<string> comptabilisent séparément.

Il s'agit d'une différence subtile, mais importante, par rapport aux classes non génériques.

class Counter<T>
{
    public static int Count;
}

Valeurs par défaut dans les classes génériques

Dans une classe générique, vous devez souvent fournir une valeur de départ à un champ de type T. Utilisez default(T) ou la forme abrégée default lorsque le type est connu grâce au contexte.

Cette expression fournit null pour les types référence et la valeur zéro pour les types valeur.

class Slot<T>
{
    public T Value = default!;
    public bool HasValue { get; private set; }
}

Hériter d'une classe générique

Vous pouvez dériver d'une classe de base générique. La sous-classe peut fixer l'argument de type ou rester elle-même générique.

Le fixer spécialise la classe de base ; rester générique transmet le paramètre au niveau supérieur.

class Box<T> { public T Value; }

class IntBox : Box<int> { }

class NamedBox<T> : Box<T> { public string Name; }

Les génériques et les collections intégrées

La bibliothèque de base .NET regorge de classes génériques : List<T>, Dictionary<TKey, TValue> et Queue<T>. Elles illustrent concrètement l'intérêt de concevoir des classes génériques.

Écrire vos propres types génériques vous permet de prolonger ce même style sûr et réutilisable.

using System.Collections.Generic;

var scores = new Dictionary<string, int>();
scores["ada"] = 95;

Vérification rapide

Vérifiez votre compréhension des classes génériques.

Récapitulatif

Les classes génériques déclarent des paramètres de type après le nom de la classe et les utilisent pour leurs champs, leurs propriétés et leurs méthodes. Vous les construisez avec des arguments de type concrets, ce qui crée des types distincts.

Elles peuvent ajouter des paramètres de type propres aux méthodes, comporter des contraintes where, être héritées et contenir un état statique propre à chaque type. Les collections intégrées en sont le meilleur exemple.

Questions Fréquemment Posées

La leçon « Classes génériques » est-elle gratuite ?

Oui — le texte complet de « Classes génériques » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C# Academy, passe à CoddyKit PRO. Le cours C# Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Classes génériques » ?

Types de conteneurs réutilisables. Tu pratiques C# Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer C# Academy ?

Aucune expérience préalable n'est requise. C# Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.

Combien de temps prend la leçon « Classes génériques » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon C# Academy ?

Oui. Chaque leçon C# Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Méthodes génériques
  2. Classes génériques
  3. Contraintes where
  4. Interfaces génériques
← Retour à C# Academy