IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Framework .NET Discussion :

Ce qu'il manque dans les généric du framework 2


Sujet :

Framework .NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    maa
    maa est déconnecté
    Membre éclairé
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Par défaut Ce qu'il manque dans les généric du framework 2
    Bonjour,

    Je trouve que les generics pourraient être largement améliorés dans une future version du framework. Je pense à :
    - la possibilité de contraindre un type paramètre à avoir un constructeur avec paramètre ;
    - la possibilité de parcourir les type paramètres d'un type paramètre sous contrainte de dérivation et de les utiliser comme type paramètre ;
    - la covariance et la contravariance des types paramètres d’une classe générique ;
    - l'inférence d'une partie des type paramètres (actuellement si tous les types paramètres ne peuvent pas être inférés alors on doit tous les préciser...)

    Pensez-vous que des amélioration sur les generics seront faite dans le version 4 ? Avez-vous en tête d'autre améliorations qui pourraient être faites ?

  2. #2
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    j'ai du mal à comprendre ce que tu attends de nous
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  3. #3
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Ce n'est pas (encore) un débat à proprement parlé donc je déplace pour le moment

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Par défaut
    Citation Envoyé par maa
    Bonjour,

    Je trouve que les generics pourraient être largement améliorés dans une future version du framework. Je pense à :
    - la possibilité de contraindre un type paramètre à avoir un constructeur avec paramètre ;
    - la possibilité de parcourir les type paramètres d'un type paramètre sous contrainte de dérivation et de les utiliser comme type paramètre ;
    - la covariance et la contravariance des types paramètres d’une classe générique ;
    - l'inférence d'une partie des type paramètres (actuellement si tous les types paramètres ne peuvent pas être inférés alors on doit tous les préciser...)

    Pensez-vous que des amélioration sur les generics seront faite dans le version 4 ? Avez-vous en tête d'autre améliorations qui pourraient être faites ?
    Je ne suis pas sur de comprendre les 3 derniers points. Peux-tu développer (en donnant des exmples de ce que tu souhaites pouvoir faire) ou me renvoyer vers des explications ?

    Sinon de mon côté ce que je trouve gênant comme limitation avec les génériques .net c'est l'impossibilité d'utiliser la surcharge d'opérateur des types fournies (c'est à dire qu'il est impossible de faire une opération de type T+T même si la classe T surcharge l'opérateur + vu que cette surcharge ne peut être indiquée au moyen d'une interface, je sais pas si je suis clair...).
    Ce qui limite l'utilisation des génériques à des classes conteneurs comme les listes, les tableaux etc... sans pouvoir faire des types génériques mathématiques.

    EDIT: article intéressant sur la variance des types génériques. C'est un peu chaud de tout saisir sans emmeler tous les concepts, mais si je comprends bien le CLR supporte la variance des génériques et c'est une décision de l'équipe C# de pas le suporter : http://blogs.msdn.com/rmbyers/archiv...16/375079.aspx

  5. #5
    maa
    maa est déconnecté
    Membre éclairé
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Par défaut
    Voici une explication plus détaillée de dont je perlais :

    deuxième point, voici un exemple :
    voici ce que l'on doit écrire si l'on souhaite instancier et remplir une liste générique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        public class GenericClass<U,T> where U : List<T>, new() where T : new()
        {
            U MyList =  new U();
            T Element = new T();
        }
    Hors le type paramètre T n'est pas nécessaire, puisqu'il est déjà contenu dans U. J'amerais pouvoir m'en passer dans la définition de ma classe. Il faudrait alors un moyen dans ma méthode de dire : je veux le type paramètre de U (T), pour pouvoir l'instancier.

    Pour le Troisième point, ton article explique bien le problème. L'auteur explique qu'il n'exclut pas la possibilité que la convariance soit implémentée dans une future version de C#. Même si ce n'est pas 'type safe', je trouverait bien pratique de laisser ou non la possibilité de l'utiliser. Qu'en penses-tu ? Je trouve que c'est un bon sujet de débat : vaut-il mieux empêcher ce genre de chose pour ne pas risquer d'avoir d'erreur à l'exécution ou laisser la possibilité de l'utiliser ou non... ?

    Pour le quatrième point voici un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            public void Method<V,W>(V p1)
            {
     
            }
    V peut être déduit du type de p1, mais pas W. Dans ce cas on doit préciser les 2 types paramètres alors qu'on pourrait simplement appeler la méthode comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Method<,MontTypeW>(monParametreDeTypeV)
    Bon je l'accorde, ce n'est pas une grosse contrainte...

  6. #6
    Membre Expert Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Par défaut
    Pour le second point :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class G<T> where T : new()
    {
    	List<T> MyList = new List<T>();
    	T Element = new T();
    }
    Non ?...

  7. #7
    maa
    maa est déconnecté
    Membre éclairé
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Par défaut
    Ca n'est pas la même chose. Dans mon exemple, je peux passer un liste qui hérite de List<T>.

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Par défaut
    Pour le 3ieme point je suis mitigé, je comprends bien l'interêt d'avoir des vérification de types à la compilation mais on perd en flexibilité. Dilemme classique.

    Mais j'insiste, pour moi les generics .net sont trés limités. Le système de contraintes est trop rigide et ne permet pas grand chose. En fait je ne vois pas de réelle gain entre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    class Exemple<T> where T: IUneInterface
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    class Exemple
    {
       private IUneInterface _membre;
     
       public Exemple(IUneInterface param)
       {
          _membre = param;
       }
    }
    Et finalement il n'y a plus vraiment de programmation générique, on est lié à une hiérarchie de classe/interface classique en POO.
    J'ai vraiment l'impression qu'en gros les generics ont "simplement" servi à MS pour créer leurs conteneurs génériques et aussi éviter les problèmes de boxing des types valeurs dans les conteneurs.

Discussions similaires

  1. Dans les téléchargements de code source, il manque des rubriques
    Par Invité dans le forum Evolutions du club
    Réponses: 2
    Dernier message: 21/04/2014, 20h15
  2. [1.x] Passage en prod, manque du index.php dans les uri
    Par CaraG33k dans le forum Symfony
    Réponses: 10
    Dernier message: 28/05/2010, 14h33
  3. [VS2005] il manque un entrée dans les menus
    Par zooffy dans le forum Visual Studio
    Réponses: 1
    Dernier message: 22/05/2007, 14h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo