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 :

Récupérer objet par son nom dans une chaîne


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de peijnoob
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    279
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 279
    Par défaut Récupérer objet par son nom dans une chaîne
    Bonjour à tous,

    Nous sommes en train de travailler sur une appli Windev, mais pour faciliter l'accès à certains webservices, nous créons des assemblies .Net qui encapsulent les appels à ces webservices via un import automatisé des WSDL sous Visual Studio.

    Seulement, nous avons quelques soucis pour récupérer certaines informations, la compatibilité Windev <=> .Net n'étant pas parfaite.

    Par exemple, on ne peut pas récupérer de propriétés de classe partielle, directement depuis Windev car celui-ci ne voit pas ces attributs.

    Nous avons donc pensé écrire (ou utiliser si quelque chose de ce genre existe) une méthode qui nous permettrait de récupérer n'importe quelle valeur en fonction du nom de cette valeur, transmise sous forme de chaîne.


    Je ne sais pas si c'est très clair, donc je vais écrire un squelette de le fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public static object recupVal(string varName){
    System.Object monObjet;
    // Le but de la fonction est de récupérer la valeur et le type d'un objet dont le  nom est fourni en paramètre sous forme de chaîne
    // un truc du genre monObjet = ObjetContenudans(varName);
    return monObjet; // avec les casts qui vont bien pour pas se retrouver bloqué côté windev
    }
    Voilà, existe t-il un moyen de faire quelque chose du genre en C# ?

    Merci d'avance !

  2. #2
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 163
    Par défaut
    Je n'ai pas très bien compris se que tu cherche à faire..
    Je te conseil de regarder du côté de System.Reflexion, de récupérer le type de ton objet passer en parametre et de travailer sur les props tel que :



    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    PropertyInfo[] props  =  monObjet.GetType().GetProperties()
     
    foreach(PropertyInfo p in props)
    {
    //Là tu prends la méthode Get ou Set suivant si tu veux écrire ou lire..
    MethodInfo m = p.GetGetMethod(); //ou GetSetMethod()
    object o = m.Invoke(monObjet, new Object[] {});
    }
    Je penses que c se que tu cherche > en écriture tu passe la valeur à écrire en lecture tu récupère un objet correspondant à la valeur...
    Renseigne toi sur la reflection

  3. #3
    Membre expérimenté Avatar de peijnoob
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    279
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 279
    Par défaut
    Merci pour cette réponse, on va y jeter un oeil et voir ce qu'on peut faire

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    205
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juin 2006
    Messages : 205
    Par défaut
    Bonjour,
    je suis le collègue de peijnoob.
    Je m'occupe d'écrire l'accesseur en C# aux objets auquel on essaye de récupérer un membre.On a abandonné de récupérer tout l'objet instancié car on as une mauvaise définition dans Windev
    J'explique en détail. On as importé des WSDL en Windev, le problème est qu'on ne voit pas les membres des classe partielles. De ce fait on veut faire une méthode en C# qui puisse nous permettre de récupéré un membre de l'objet déjà instancié.

    J'ai donc essayé le code fournit plus haut en faisant préalablement des recherches pour le modifier suivant mes attentes, mais comme je suis débutant en C#, je n'arrive pas a trouver mon bonheur.

    je voudrais donc quelque chose dans le genre de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    namespace MyWS
    {
        public class MyAccess
        {
            public static Object AccesseurWS(Object MaClasse, string MonMembre)
            {
     
                object result;
                // Et le corps doit me permettre de récupéré le MonMembre de l'objet instancié correspondant a Maclasse
                return result;
            }
        }
    Si quelqu'un pouvais me mettre sur la voie ou me donner un coup de pousse, ça serait le bien venu.
    Merci d'avance pour toute aide

  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
    Comme l'a indiqué GSXRider, il faut regarder du côté de la réflexion.
    Le type "Type" a un certain nombre de fonctions d'accès aux méthodes, champs, propriétés, etc. d'un type donné.
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class A { public int i;}
    class Machin
    {
      void f()
      {
        A a = new A(); a.i = 5;
        Type typeDeA = typeof(A);
        System.Reflection.FieldInfo f = typeDeA.GetField("i");
        object o = f.GetValue(a); // o = 5
      }
    }
    Pour plus de détail, voir la MSDN sur System.Type.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    205
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juin 2006
    Messages : 205
    Par défaut
    Merci beaucoup avec ta réponse en plus on a réussi à trouver ce qu'on voulais.
    Du coup je post mon code pour ceux qui voudrais avoir les mêmes résultats.
    Nous pouvons donc récupérer une propriété d'une classe

    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
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Reflection;
    using System.Windows.Forms;
     
    namespace GetSpeMemberOfObject
    {
        public class GetSpeMember
        {
            public static Object GetProperty(Object MonObject, string MonMembre)
            {
                    Type t = MonObject.GetType();
                    System.Reflection.PropertyInfo f = t.GetProperty(MonMembre);
                    Object result = f.GetValue(MonObject,null) ;
                    return result;
            }
        }
    }
    Maintenant je vais coder le reste pour accéder à une méthode
    Pour un NooB je suis content de moi XD
    Allez @ bientot dès que j'ai fais ça

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

Discussions similaires

  1. [POO] Appeler une fonction par son nom dans une variable
    Par whitespirit dans le forum Langage
    Réponses: 16
    Dernier message: 18/06/2008, 11h23
  2. Réponses: 7
    Dernier message: 01/04/2008, 13h57
  3. Réponses: 1
    Dernier message: 25/11/2007, 12h28
  4. Réponses: 2
    Dernier message: 19/04/2007, 15h26
  5. Réponses: 2
    Dernier message: 12/04/2007, 17h12

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