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

C# Discussion :

[Generics] Diriger vers la bonne méthode


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Par défaut [Generics] Diriger vers la bonne méthode
    Bonjour,

    J'ai tenté quelque chose de peut etre trop ambitieux :

    appeller une methode avec un variable a type static avec en argument une variable généric...

    en gros ca donne ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
            protected override void RegisterAllViewEvents<T>(T view)
            {
                RegisterViewEvents(view);
            }
     
            public void RegisterViewEvents(ISearchFormView view)
            {
                view.SearchExecuted += new EventHandler(SearchExecuted);
            }
     
            public void RegisterFiltersEvents(ISearchFilterView view)
            {
                view.FilterApllied += new EventHandler(FilterApllied);
            }
    Evidement cela ne marche pas (ce genre de lien doivent etre fait à la compilation) comment fait un truc propre sans avoir a faire dans RegisterAllViewEvents des Test sur le type en entrée ?

    merci

  2. #2
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    J'ai pas tout compris ce que tu voulais faire. Mais tu peux rajouter une contrainte sur T avec une clause where.

  3. #3
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Citation Envoyé par anthyme Voir le message
    Bonjour,
    J'ai tenté quelque chose de peut etre trop ambitieux :
    Ce que tu veux, c'est appeler l'une ou l'autre surcharge d'une méthode non générique dans une fonction générique en fonction du type T ? Je ne crois pas que ce soit possible simplement, à moins de faire des tests du style if (T is IMachin) else if (T is IBidule).
    J'avais voulu faire la même chose, du style (l'exemple est bidon mais simple):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public ConvertTodecimal<T>(T value)
    {
    ...
    }
    qui appelerait automatiquement convert.todecimal(string), convert.todecimal(double d), convert.todecimal(int i), etc. en fonction de T, mais j'avais laissé tomber.

  4. #4
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Par défaut
    Guulh a bien compris ce que je voulais dire

    Bon snif

    Je laisse quand même le topic au cas ou quelqu'un aurait une idée

  5. #5
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Citation Envoyé par anthyme Voir le message
    Guulh a bien compris ce que je voulais dire

    Bon snif

    Je laisse quand même le topic au cas ou quelqu'un aurait une idée
    Je pensais pouvoir feinter comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void f<T>(T value)
    {
       g(value);
    }
    void g(object obj)
    {
    ...
    }
    void g(int i)
    {
    ...
    }
    Malheureusement, f<int> n'appelle pas g(int) mais g(object) car le compilo ne sait caster T qu'en object (ou autre chose si on a défini une clause where). Le genre de différence subtile entre les templates et les generics

    Mais si quelqu'un a une solution autre qu'un switch(typeof(T).ToString()) bien crado, je suis preneur aussi.

  6. #6
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Par défaut
    je peux pas tester pour le moment mais je viens de penser :

    peut etre avec un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fonction(objet as objet.GetType())
    ??

    Je testerai ce soir ...

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Par défaut
    Salut,

    premiere chose, tu ne peux utiliser as qu'avec un type ref, donc pour les int ca ne marchera pas, et tu ne peux pas non plus utiliser as avec un type (variable), tu ne peux faire qu'avec un defini à la compilation ou un type parametre (dans une methode genrique) au minimum contraint sur un type reference.

    Bref pas beaucoup de solutions, a part, le "tres laid" switch sur o.GetType().ToString() , peut etre (sans certitude) aussi avec une methode dynamique, mais ca risque de pas mal complexifier le 'schmilblikk'.

Discussions similaires

  1. pour se diriger vers une page web
    Par Ickou dans le forum Langage
    Réponses: 4
    Dernier message: 31/03/2006, 16h31
  2. Réponses: 8
    Dernier message: 27/02/2006, 14h28
  3. redirection vers la bonne page
    Par PAYASS59 dans le forum Langage
    Réponses: 6
    Dernier message: 30/01/2006, 11h30
  4. [EJB2.1 Entity] [CMP] Est-ce la bonne méthode ?
    Par stailer dans le forum Java EE
    Réponses: 8
    Dernier message: 20/06/2004, 19h42

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