Catégories
.Net C#

Génériques en C# (Generics) qu’est ce que c’est et à quoi ça sert ?

La définition vous semblera peut être un peu abstraite, mais la suite et les exemples vous permettront de mieux comprendre.

Les génériques sont un concept en C# qui donne la possibilité au développeur:

  1. d’écrire ses propre  interfaces, classes, méthodes, événements et délégués génériques, en spécifiant un type en paramètre et d’obtenir malgré cela des objets fortement typés (lire la suite pour comprendre)
  2. d’utiliser tout un tas de classes et interfaces génériques déjà définis (et tellement utiles que nous ne pouvons pas nous en passer !) dans le .Net framework (pour être plus précis dans l’espace de nom System.Collections.Generic)

La particularité d’un type générique est de prendre en paramètre un type, on utilise par convention <T> (mais il est possible d’utiliser <X> ou autre). Cela  va permettre par exemple d’instancier un classe avec des types d’objets différents dans différentes situations.

Mais à quoi ça sert les génériques ?

Utilisons par exemple d’un type générique extrêmement populaire, la classe List<T> ou pour être plus précis System.Collections.Generic.List<T>. Sa définition est la suivante:

Représente une liste fortement typée d’objets accessibles par index. Fournit des méthodes de recherche, de tri et de manipulation de listes.

c’est donc une sorte de tableau qui pourra contenir des objets (le fameux <T>), le type d’objets que contiendra une liste en particulier sera déterminer lors de l’instanciation de la classe :

var maListeInt = new List();
var maListeVoitures = new List();

dans cet exemple nous avons créé 2 instances de List<T> maListeInt et maListeVoitures.

maListeInt sera une liste contenant uniquement des int, alors que maListeVoitures sera une liste contenant uniquement des objets voitures. Il sera par exemple impossible d’ajouter des voitures dans maListeInt (et inversement), c’est pourquoi on dit qu’on a ici  des listes fortement typées.

Nous avons donc pu ré-utiliser une même classe, la classe générique System.Collections.Generic.List<T> (List<T>) pour créer des instances contenant (et permettant de manipuler) des objets de types différents (ici int et voiture).

Liens utiles:

article sur la création de classes génériques – developpez.com

les génériques dans guide de programmation C# – MSDN

video payante in english – Pluralsight