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 :

[C# générics] Methode statique d'un type générique


Sujet :

C#

  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 [C# générics] Methode statique d'un type générique
    Bonjour,

    a priori ce n'est pas faisable de base mais peut etre est ce possible par un moyen détournée ?

    Peut on executer une méthode static d'un type a partir d'un générique ?

    par exemple dans

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class A<T>
    {
        A(){
        <<Executer une méthode static de T>>
        }
    }

    Merci

  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
    Etant donné que T n'a pas de type défini (sauf contrainte), tu ne peux pas appeler de méthode statique dessus.
    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
    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
    tu pourrais m'expliquer coment faire avec les contraintes ?

    En effet avec les contraintre j'arrive a récupérer les methodes classique mais pas les statiques ...

    merci

  4. #4
    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
    Je ne voulais pas dire que c'est possible de le faire avec des contraintes, je voulais plutot dire que T n'est défini que par les contraintes. Ce n'est effectivement pas possible de définir une méthode statique dans une interface.
    Je crains que ton approche ne soit pas réalisable.
    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

  5. #5
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Citation Envoyé par anthyme Voir le message
    a priori ce n'est pas faisable de base mais peut etre est ce possible par un moyen détournée ?
    Soit T un élément de .NET, il est donc muni d'un ensembles d'outils sympas només réflexion ( résultat d'une journée de math, dsl )

    Tu peut donc faire typeof(T).GetMethod(...) et ainsi rechercher les membres statiques de T.

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 82
    Par défaut
    Fais un tour sur ce post :
    http://blogs.msdn.com/abhinaba/archi...-generics.aspx

    pas de solutions, mais une explication ;-)

  7. #7
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    mais pourquoi tout le monde s'embette ? ça marche pas ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    class GenericTest
            {
                public static void LOL()
                {
                    MessageBox.Show("LOL");
                }
            }
     
            public void LOL_Test<T>()
            {
                Type t = typeof(T);
                t.GetMethod("LOL", BindingFlags.Static | BindingFlags.Public).Invoke(null, new object[0]);
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
                LOL_Test<GenericTest>();
            }

  8. #8
    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
    Citation Envoyé par smyley Voir le message
    mais pourquoi tout le monde s'embette ? ça marche pas ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    class GenericTest
            {
                public static void LOL()
                {
                    MessageBox.Show("LOL");
                }
            }
     
            public void LOL_Test<T>()
            {
                Type t = typeof(T);
                t.GetMethod("LOL", BindingFlags.Static | BindingFlags.Public).Invoke(null, new object[0]);
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
                LOL_Test<GenericTest>();
            }
    Bah teste et dis nous

  9. #9
    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
    J'ai penser au générics eteffectivement on peut quasiement tout faire avec mais sortir ça comme la méthode ultime a chaque fois me pose probleme ...

    Notamment pour la perte de performance qu'elle implique

    merci pour vos reponse j irai voir le blog quand j aurai le temps

  10. #10
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Citation Envoyé par Thomas Lebrun Voir le message
    Bah teste et dis nous
    Je l'ai testé avent de poster ce code ...

    Parfois quand quelque chose n'est pas possible par défaut sans .NET, soit c'est que le design de l'application n'est pas très bonne ( Pourquoi espérer appeller une méthode statique en utilisant simplement un objet, prévu pour passer des références ( classe génériques ) ? )
    Après, si c'est une nécéssité absolue, celà va forcément créer des contraintes car le design originel de .NET ne le permet pas ...

    Sinon, même en perdant des informations ont peut toujours avoir des méthodes pour gérer les erreur, et faire quelque chose d'approprié avec

Discussions similaires

  1. Réponses: 12
    Dernier message: 02/12/2010, 11h36
  2. Réponses: 2
    Dernier message: 02/05/2006, 14h34
  3. y a-t-il un support de types génériques pour python ?
    Par silverhawk.os dans le forum Général Python
    Réponses: 15
    Dernier message: 24/03/2006, 18h23
  4. Methodes statiques
    Par romeo9423 dans le forum C++
    Réponses: 3
    Dernier message: 01/02/2006, 11h30
  5. [Singleton] difference singleton classe avec methodes statiques
    Par matN59 dans le forum Design Patterns
    Réponses: 6
    Dernier message: 15/01/2006, 11h04

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