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 :

Accès à un objet d'une classe par son nom


Sujet :

C#

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2011
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 79
    Points : 118
    Points
    118
    Par défaut Accès à un objet d'une classe par son nom
    Bonjour à tous,

    Un petit souci qui ne devrait pas en être un mais je sèche...

    Je souhaite adresser un objet d'une classe par son nom pour modifier sa valeur. Je précise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public class Test
      {
        public string Abcisses
        { get; set; }
     
        public string Ordo
        { get; set; }
     
        public int Nombre
        { get; set; }
      }
    Je souhaite pouvoir créer une fonction avec comme paramètres "Nom du membre", nouvelle valeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        public void Modifier(string ObjectName, object NewValue)
        {
         ...
        }
    Dans mon exemple je passerai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Modifier("Nombre", 12345);
    ou
    Modifier("Ordo", "Axe des Y")
    J'ai essayé de passer par les énumérateurs mais je cale...

    Quelqu'un a-t-il une idée pour ce qu'il doit y avoir dans Modifier(...) ?

    Merci et bon courage pour le confinement !

    Phil

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    c'est à réfléchir car même si c'est faisable ce n'est pas toujours recommandé
    une alternative serait d'avoir un dictionary<string, object> qui serait les paramètres et leur valeur, là pour adresser par nom c'est plus simple

    sinon c'est la reflection qu'il faut utiliser
    tu peux demander à une classe son type, tu peux demander à un type ses membres, donc y retrouver une propriété et lui setter sa valeur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    instance.GetType().GetProperty(nameof(Nombre), bindingflags.public | bindingflags.instance).SetValue(instance, value);
    c'est beaucoup moins performant que de setter une propriété
    si tu en fais une de temps en temps ca reste totalement transparent, par contre si tu veux en faire des milliers dans une boucle c'est à éviter

    l'utilisation de nameof permet d'être averti par le compilateur si le nom de la propriété change, alors qu'avec un string ca fait un bug potentiel

  3. #3
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2011
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 79
    Points : 118
    Points
    118
    Par défaut
    OK merci Pol63, je teste ça.

    Ce n'est pas destiné à être systématique ni récurent, plutôt occasionnel. Je n'ai pas de soucis de performances.

    Le contexte :

    J'utilise la suite de DevExpress et en particulier le composant PropertyGridControl.
    J'associe un objet de type T à la PropertyGrid (DataSource)
    Je peux savoir quelle property a été modifiée par un event (sur clavier ou souris), le nom du membre le la classe associée à cette propriété et la nouvelle valeur.
    Connaissant cela, je veux pouvoir choisir des objects dans une List<> du type T et modifier uniquement le membre nommé.

    Suis-je clair ou un peu nébuleux ?

    Phil

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    oui je pense avoir compris, du coup ça semble adapté

Discussions similaires

  1. Réponses: 3
    Dernier message: 29/06/2012, 01h09
  2. Réponses: 5
    Dernier message: 31/05/2012, 16h00
  3. Retrouver une instance de classe par son nom
    Par chipster45 dans le forum Langage
    Réponses: 15
    Dernier message: 10/03/2008, 19h26
  4. Réponses: 3
    Dernier message: 25/02/2007, 18h49
  5. Réponses: 8
    Dernier message: 19/10/2006, 15h41

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