Developpez.com - Rubrique .NET

Le Club des Développeurs et IT Pro

Tutoriel : Créer ses propres classes génériques

Par Benjamin De Vuyst

Le 2009-05-13 20:19:52, par Louis-Guillaume Morand, Rédacteur

Le framework .NET propose toute une panoplie de classes dites génériques.
L'exemple le plus connu est probablement les List<type> qui permet de créer des listes fortement typées.
Ce mécanisme est puissant, et nous pouvons nous aussi définir des classes génériques dans nos développements applicatifs.
Mais qu'est ce qu'une classe générique ?

http://bdevuyst.developpez.com/tutor...es-generiques/

donnez votre avis sur l'article
  Discussion forum
6 commentaires
  • roster
    Membre averti
    Très pratique les sources pour bien assimiler le tout.
    Un grand merci!
  • Philippe Vialatte
    Expert éminent sénior
    Pas mal comme article, pour montrer les bases des classes generiques.

    Seul petit bemol, je ne trouve pas l'exemple super realiste (en fait, il serait peut-etre plus judicieux de faire une classe avec un contructeur acceptant les 3 interfaces, plutot que de faire un new sur les classes en question...mais c'est mon avis a moi que j'ai moi-meme ), et j'aimerais bien voir l'exemple du framework de DAL

    Vivement l'article sur ton framework de DAL
  • Bluedeep
    Inactif
    L'article est pas mal, il renseigne bien sur les bases.

    Je mettrais un bémol toutefois : tant qu'à faire un article qui fournit les bases de l'utilisation de la généricité, il est un peu dommage que seul le cas des classes soit abordé, pas celui des méthodes, interfaces et delegate génériques (toutes choses qui sont largement aussi utiles que les classes, au moins pour les deux premières).
  • benji_dv
    Rédacteur
    Effectivement, les remarques me semblent appropriées, concernant un exemple d'utilisation sur les delegates, ou interfaces, cela pourrait faire également l'objet d'un complément au tuto.
    Je ne voulais pas "brouiller" les pistes des personnes abordant ces concepts.

    Mais effectivement, remarques pertinentes, j'en tiendrai compte pour la suite.
    Merci bcp
  • Alp
    Expert éminent sénior
    Tiens, c'est agréable de découvrir ce genre de choess en .NET.

    Est-ce qu'on peut "jouer" comme en C++ pour découper les classes selon ce que l'on appelle le "Policy Based Design" : http://alp.developpez.com/tutoriels/...raitspolicies/ ?

    Ca assouplirait pas mal les designs et ça donnerait un énorme +.
  • SpiceGuid
    Membre émérite
    J'ai vaguement survolé tous ces tutoriels sur les génériques, en m'attardant surtout sur celui de sjrd (Les génériques avec Delphi 2009 Win32).

    J'imagine que chaque tutoriel a ses propres objectifs et il est fort possible que mes commentaires qui suivent soient partiellement ou totalement hors-sujet.
    Disons qu'il s'agit plus d'un éclairage sur les génériques en général, de la façon de les comprendre et de les présenter, que d'une critique du présent tutoriel.

    Selon moi la notion de type générique est souvent introduite d'une façon trop indépendante des notions déjà acquises :
    • la généricité c'est avant tout paramétrer les types par des types
    • du coup on a des types arguments formels et des types arguments réels
    • la généricité se comporte d'une façon très similaire à l'application de fonction quant au nombre et à la compatibilité des types arguments


    Envoyé par Créer ses propres classes génériques
    public class Vehicule <ClassChassis, ClassMoteur, ClassRoues>
    Cette syntaxe définit trois types manipulés au sein de ma classe (ClassChassis, ClassMoteur, ClassRoues)
    Ce sont 3 types formels.
    À mon avis le but d'un tutoriel sur la généricité c'est d'expliquer la différence entre types paramétrés, types concrêts, types formels et types réels. Ne pas expliquer cette différence c'est laisser le lecteur dans son ignorance du mécanisme de la généricité.

    C'est tout simple :
    1. List<T> est un type paramétré où T est le type argument formel
    2. List<Int32> est un type concrêt où Int32 est le type argument réel

    (ceux qui liront mon tutoriel sur les modules d'ordre supérieur pourront constater que ça marche aussi avec les modules, modules paramétrés, modules concrêts, modules formels et modules réels. en fait on a tout dit quand on a dit qu'un type générique est un type d'ordre supérieur)

    On a tout intérêt à réutiliser le vocabulaire connu surtout quand il est simple, clair et systématique.
    Une fois qu'on a introduit ces notion basiques on peut passer plus sereinement aux notions avancées (généricité contrainte, covariance/contravariance, traits,...) qui sont plus spécifiques à chaque langage. À la limite on devrait avoir un template de tutoriel sur les génériques, valable pour tous les langages majeurs du forum et qu'on spécialiserait pour chacun d'eux. En l'absence d'un tel tutoriel générique je suis d'avis que celui de sjrd est un modèle à imiter sans modération.