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 :

Génération dynamique de code (C# 2.0)


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Avatar de Psycadi
    Homme Profil pro
    Chef de projet - Expert en message box
    Inscrit en
    Juillet 2003
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet - Expert en message box

    Informations forums :
    Inscription : Juillet 2003
    Messages : 147
    Par défaut Génération dynamique de code (C# 2.0)
    Bonjour à tous,

    J'ai une petite question.

    Est-ce qu'il est possible d'ajouter dynamiquement une méthode à une classe?

    Exemple :
    Dans un projet, j'ai une classe publique avec plein des fonctions.
    Et dans un autre projet (d'une autre solution), j'ai besoin d'ajouter ponctuellement une fonction au premier projet.

    J'ai vu sur le web qu'on pouvait utiliser CSharpCodeProvider mais dans le cas du lien, ils modifient une méthode virtuelle. Et ils sont dans le même projet.

    Hélas, moi elle n'existe pas. Il faut que je l'a créé.

    Est-ce que c'est possible?

    Si vous avez des liens ou exemples ça m'aiderait.

    Merci de votre aide

  2. #2
    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
    C'est probablement faisable, reste à voir si c'est nécessaire.

    Une solution simple : si cette méthode n'a besoin que des membres publics de ta classe et que tu bosses avec C#3, tu peux utiliser les méthodes d'extension.

  3. #3
    Membre confirmé
    Avatar de Psycadi
    Homme Profil pro
    Chef de projet - Expert en message box
    Inscrit en
    Juillet 2003
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet - Expert en message box

    Informations forums :
    Inscription : Juillet 2003
    Messages : 147
    Par défaut
    En fait, j'ai 10 classes en tout et dans certains cas, j'ai besoin d'ajouter une méthode sur 6 classes.

    Par contre, je suis en C# 2.0...

    Cependant, si j'ai une classe comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public classe Toto
    {
      public Toto(){}
      private typeObj[] _Truc;
      public Truc
      {
        get { return _Truc}
        set { _Truc = value}
      }
    }
    Et moi, je veux accéder à la méthode Truc[0].MaMéthode().

    J'ai essayé avec des GetMethod GetType... mais je ne trouve pas la solution.

  4. #4
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Par défaut
    Bonjour.

    Je ne suis pas sur de comprendre ....

    Tu veux au moment de l'exécution pour rajouter une méthode à une classe ? Si c'est le cas tu as un énorme problème de conception ....

    Si par contre tu veux juste accèder à une méthode qui ne serait dispo car tu utilises un objet de type supérieur à celui qui possède la méthode alors tu as deux solutions:
    - Gérer les cas avec le mot clef is qui permet de déterminer si un objet est du type souhaité.
    - La réflection en passant par GetType().GetMethods() ....

    Par contre la méthode de la reflection est bcp plus longue en terme d'exécution.

  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 dev01 Voir le message
    Bonjour.

    Je ne suis pas sur de comprendre ....
    Moi non plus Dans l'exemple cité, en quoi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monToto.Truc[0].Methode();
    est insuffisant ?

  6. #6
    Membre confirmé
    Avatar de Psycadi
    Homme Profil pro
    Chef de projet - Expert en message box
    Inscrit en
    Juillet 2003
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet - Expert en message box

    Informations forums :
    Inscription : Juillet 2003
    Messages : 147
    Par défaut
    Et bien en fait, les classes, je n'ai pas le droit de les modifier et j'ai 6 classes différentes
    Toto1 Toto2 Toto3 avec des méthodes identiques mais des propriétés différentes.

    Vu que je fais du code le plus générique possible, le but est de mettre le nom de la classe en string et donc, là je me sers de GetType GetMethod...

    Mais, je n'arrive pas à y accéder.
    Je vais un truc comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MethodInfo mtdInfo = typeToto.GetType().GetProperty("Truc").GetType().GetMethod("LaMethodeDeTrucQueJeVeux");
    Avec le mtdInfo.Invoke qui va bien.

    Hélas, je suis obligé du faire du générique "à outrance" car il se peut que rapidement, on passe à 10 classes, 15 classes...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 17/04/2007, 14h06
  2. [DOM] Génération dynamique fichier xml
    Par Fabouney dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 03/10/2005, 09h45
  3. [SQL*Plus] génération dynamique du fichier de spool
    Par lalystar dans le forum Oracle
    Réponses: 3
    Dernier message: 06/12/2004, 10h44
  4. Réponses: 7
    Dernier message: 22/10/2004, 16h18
  5. [Plugin]Gestion de génération automatique de code
    Par Maggic dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 11/05/2004, 11h35

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