Les génériques sont une technique de programmation puissante en C#.NET permettant d’écrire du code réutilisable pour différents types de données sans réécrire la logique pour chaque type. Ils fonctionnent en utilisant des paramètres de type, représentés par des lettres majuscules entre crochets <>, comme List<T>
, Dictionary<TKey, TValue>
. T
, TKey
et TValue
sont des paramètres de type représentant le type de données concret utilisé lors de l’instanciation de l’objet.
Une des applications les plus courantes des génériques est la création de collections comme List<T>
. Avant les génériques, pour créer une liste d’objets Student
, il fallait utiliser ArrayList
et effectuer un transtypage à chaque récupération d’élément. Cela risquait de provoquer des erreurs d’exécution en cas de transtypage incorrect.
#
// Sans générique
ArrayList students = new ArrayList();
students.Add(new Student());
students.Add(new Car()); // Aucune erreur de compilation
Student first = (Student)students[0]; // Transtypage requis, risque d'erreur d'exécution
Avec les génériques, List<T>
résout ce problème en autorisant uniquement l’ajout d’objets de type T
à la liste. Le compilateur détecte les erreurs dès la compilation si l’on tente d’ajouter un objet de type incorrect.
#
// Avec générique
List<Student> students = new List<Student>();
students.Add(new Student());
students.Add(new Car()); // Erreur de compilation
Student first = students[0]; // Aucun transtypage requis
L’utilisation des génériques offre plusieurs avantages :
- Réutilisation du code : Écrire le code une seule fois pour plusieurs types de données. Par exemple,
List<T>
peut être utilisé pourList<int>
,List<string>
,List<Student>
, etc. - Sécurité de type : Le compilateur vérifie les types de données à la compilation, réduisant les erreurs d’exécution.
- Performance : Évite le boxing/unboxing lors de la manipulation de types valeur, améliorant les performances du programme.
- Lisibilité et maintenance : Code plus clair, plus facile à comprendre et à maintenir.
Les génériques ne sont pas seulement utilisés dans les collections, mais aussi dans la définition de méthodes (méthodes génériques) et de classes (classes génériques). Par exemple, une méthode Swap<T>
peut échanger la valeur de deux variables de n’importe quel type.
#
public static void Swap<T>(ref T a, ref T b)
{
T temp = a;
a = b;
b = temp;
}
int x = 10;
int y = 20;
Swap<int>(ref x, ref y); // Échange de deux entiers
string str1 = "Hello";
string str2 = "World";
Swap<string>(ref str1, ref str2); // Échange de deux chaînes
En résumé, les génériques sont une fonctionnalité importante de C#.NET, permettant d’écrire du code flexible, sûr et efficace. Ils sont la base de nombreuses technologies comme LINQ et jouent un rôle crucial dans le développement d’applications modernes. Comprendre ce qu’est un objet générique et comment l’utiliser permet aux développeurs d’améliorer la qualité de leur code et d’optimiser les performances de leurs applications.