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#] Reflexion et propriétés statiques héritées


Sujet :

C#

  1. #1
    Membre actif Avatar de gdkenny
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 251
    Points : 248
    Points
    248
    Par défaut [C#] Reflexion et propriétés statiques héritées
    Bonjour,

    J'ai remarqué un comportement bizarre sur la recherche de propriété par la reflexion:

    Voici ma classe de base simplifiée

    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
     
     
    public class classe_base
    {
     static protected string _variable1;
     
     protected  string _variable2; 
     
     public static string variable1
     {
       get {return  _variable1;}
     }
     
     public string  variable2
     {
       get {return  _variable2;}
     }
     
    }
    de cette classe héritent 2 types de classes filles:
    -des classes instanciables.
    -des classes avec seulement des propriétés et méthodes statiques.(appelées a évoluer en classe instanciable)

    Par reflexion, je récupère la propriété 'variable1' à partir du type de la classe dérivée.

    Pour les classes instanciées, aucun problème, je récupère la propriété statique de la classe mère.
    Pour les classes statiques, les propriétés statiques de la classe mère ne sont pas visibles

    Du coup je passe par le type de la classe mère pour accéder aux propriétés,mais je ne comprend pas pourquoi ca ne marche pas à partir de la classe dérivée, d'autant plus que par le code, l'intellisense de VS me propose les propriétés statiques de la classe mère lorsque je met un . après le type de ma classe dérivée.
    ...

    Je me demande si il n'y a pas une histoire par rapport au constructeur statique de la classe de base qui ne s'exécute pas ?

  2. #2
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    459
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 459
    Points : 553
    Points
    553
    Par défaut
    Pourrais-tu indiquer le code que tu utilises pour examiner les classes (surtout les BindingFlags).

  3. #3
    Membre actif Avatar de gdkenny
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 251
    Points : 248
    Points
    248
    Par défaut
    Bindflag? c'est quoi ca, une marque de chaussure?

    Voila le code que j'utilise pour récupérer ma propriété.

    Le try pour les classes dérivées instanciable et le catch dans le cas d'une classe statique

    la variable _type_courant stocke le type de la classe dérivée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    //récupération de la liste de C_erreurs correspondant aux erreurs d'accés aux données
                    try
                    {                    
                        listerreurs = (List<C_erreurs>)_type_courant.GetProperty("erreur_operation").GetValue(null, null);
                    }
                    catch
                    {
                        Type type_base = C_reflexion.retourner_type("Mon_type_de_base");
     
                        listerreurs = (List<C_erreurs>)type_base.GetProperty("erreur_operation").GetValue(null, null);
                    }

  4. #4
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    459
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 459
    Points : 553
    Points
    553
    Par défaut
    Les BindingFlags te permettent de définir quelles propriétés doivent être recherchées (par exemple Statinc ou non, déclarées sur la classe uniquement, etc...)

    Ce lien pour la méthode GetProperty et ici les BindingFlags.

  5. #5
    Membre actif Avatar de gdkenny
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 251
    Points : 248
    Points
    248
    Par défaut
    Merci pour l'info des bindflag,

    J'ai pu en composer un qui me permet de me passer du try catch
    je me rappelerai de les utiliser dorénavant,cqfd

  6. #6
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    459
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 459
    Points : 553
    Points
    553
    Par défaut
    De rien. Le try catch n'était pas vraiment élégant...
    Ton cas est donc ?

  7. #7
    Membre actif Avatar de gdkenny
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 251
    Points : 248
    Points
    248
    Par défaut
    Oui c'est bon, mon problème est résolu.
    Merci!

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

Discussions similaires

  1. [PHP 5.3] Sauvegarder les propriétés statiques d’une classe dans un fichier
    Par geforce dans le forum Langage
    Réponses: 1
    Dernier message: 26/04/2010, 03h05
  2. ajouter une propriété statique a l'execution ?
    Par Lorenzo77 dans le forum ActionScript 3
    Réponses: 2
    Dernier message: 09/02/2010, 18h33
  3. recuperer la liste des propriétés statiques d'une classe ?
    Par Lorenzo77 dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 22/11/2009, 12h50
  4. [PHP 5.1] [POO] Initialisation de propriété statique de classe
    Par Tino13 dans le forum Langage
    Réponses: 5
    Dernier message: 11/09/2009, 09h06
  5. [PHP 5.2] [POO] Propriétés statiques non partagées par les classes filles
    Par gege2061 dans le forum Langage
    Réponses: 5
    Dernier message: 08/09/2009, 15h25

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