Découvrez les nouveautés du Framework de Microsoft
16 avr
La première chose à dire, est que ces derniers sont une implémentation du concept de templates qui existait déjà en C++. Il est dorénavant supporté par C#, C++ et VB.Net.
Le principe même des Generics est la généralisation (et/ou réutilisation) de méthode sans ce soucier du typage des paramètres par exemples (transtypage).
Attention, les Generics ne sont pas identiques aux templates du C++, ils ont encore un certain nombre de limitations:
- il n’est pas possible d’utiliser des opérateur arithmétiques mais on peut utiliser des opérateurs personnels
- les paramètres génériques ne peuvent avoir de valeur par défaut
- d’autres limitations dont l’utilisation très rare ne mérite pas de se pencher dessus pour le moment
Cela paraîtra sûrement plus clair à l’aide d’un exemple concret:
static void Main(string[] args)
{
int a = 1, b = 5, c = 3;
List<int> myIntegerList = new List<int>();
myIntegerList.Add(a);
myIntegerList.Add(b);
myIntegerList.Add(c);
foreach(int val in list)
{
total = total + val;
}
}
Sans entrer dans les détails, nous verrons comment utiliser ce que l’on appelle une “Type-safe generic List”, une List (collection) dont le type est sûr. En effet, une List peut, de base accepter des objets de type différents qui sont alors “boxés” (rangés sans être castés dans un type différent), ainsi lors de la récupération des “items” de la List, nous ne savons pas le type de ces derniers et le unboxing peut entrainer des erreurs d’exécution. Ici, nous “créons” une collection ne contenant que des objets du type Integer, et l’opération de boxing/unboxing n’a plus lieu d’être. Les opérations sur cette collection sont alors plus “sécurisées”.
Bien sûr, il est possible de tirer avantage des Generics pour créer des classes réutilisables. En voici un exemple:
using System;
using System.Collections.Generic;
using System.Text;
namespace Developper
{
public class ClasseDemo< Type1, Type2 >
{
private Type1 _obj;
public ClasseDemo(KeyType obj1)
{
// constructeur
_obj = obj1;
}
public Type2 Method(Type2 obj1, Type2 obj2)
{
// Code fonctionnel
}
}
}
Ce bout de code est un peu spécial, mais je tenais à montrer la possiblité d’utiliser plusieurs paramètres génériques pour une seule et même classe. Cette dernière prend donc deux paramètres, l’un étant utilisé dans son constructeur, l’autre compare deux objets et retourne par exemple l’un des deux selon une certaine comparaison.
Ainsi, vous savez maintenant que les Generics et leurs nombreuses utilisations vous permettront de réduire la taille de votre code et de faire des classes, méthodes réutilisables à volonté.
Source : developpez.com
Un seul commentaire pour "Nouveauté C# 2.0 : Les generics (ou classes templates)"
[…] Pour leurs utilisations, merci de ce referer à l’article suivant : Les generics en C# (ou classe template) […]
Laisser un commentaire