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

Framework .NET Discussion :

[C#] Accéder au type d'une classe


Sujet :

Framework .NET

  1. #1
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Points : 2 927
    Points
    2 927
    Par défaut [C#] Accéder au type d'une classe
    Il existe le mot-clé this pour accéder à l'instance d'une classe.
    Il existe le mot-clé base pour accéder à la classe mère d'une classe.

    Mais existe-t-il un mot-clé (ou une astuce) pour accéder au type de la classe elle-même, de façon "statique" ?

    Je m'explique : j'ai une classe mère Item à partir de laquelle dérivent toute une palanquée de classes. Exemple : Devise : Item.
    Chacune de ces classes a des attributs personnalisés :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    [AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
    class ItemAttribute : Attribute
    {
        public string Flag;
        public int FieldsCount;
        public int FlagRepeat;
        public int ContentRepeat;
    }
    Je souhaite rédiger dans ma classe mère Item des propriétés statiques permettant d'accéder à ces attributs, mais correspondant au type de la classe dérivant (exemple : accéder aux attributs de Devise à partir de propriétés statiques définies dans Item).

    Actuellement, j'utilise l'instance des classes, mais c'est un peu nul de ne pas pouvoir y accéder de façon statique, puisque ce sont des attributs. Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public string Flag
    {
        get
        {
            return ((ItemAttribute[])this.GetType().GetCustomAttributes(typeof(ItemAttribute), true))[0].Flag;
        }
    }
    Ceci dit, il y a peut-être une mauvaise conception à l'origine. Je suis donc ouvert à toute proposition. Le principe d'origine étant de ne pas avoir à définir des propriétés pour chaque classe qui dérivera de Item.

    Merci !

  2. #2
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Points : 706
    Points
    706
    Par défaut
    Pour réupérer la valeur d'un attribut ou les attributs déclarés pour une classe, il faut passer par la réflexion.

  3. #3
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Points : 2 927
    Points
    2 927
    Par défaut
    Citation Envoyé par harz62 Voir le message
    Pour réupérer la valeur d'un attribut ou les attributs déclarés pour une classe, il faut passer par la réflexion.
    Euh... Merci mais j'en avais déjà conscience. C'est ce que je fais dans le morceau de code que je donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return ((ItemAttribute[])this.GetType().GetCustomAttributes(typeof(ItemAttribute), true))[0].Flag;

  4. #4
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Points : 1 257
    Points
    1 257
    Par défaut
    je crois que ta conception n'est pas bonne ...

    J'étais déjà parti dans des délires comme ca en voulant accéder aux champs static d une classe fille mais c'est un non sens ... tu devrais revoir ton archi ...

  5. #5
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Points : 706
    Points
    706
    Par défaut
    Si tu veux renvoyer des valeurs d'attributs, à ma connaissance c'est le seul moyen...

  6. #6
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 77
    Points : 78
    Points
    78
    Par défaut
    Je dirai qu'étant donné que la classe mère n'a pas du tout connaissance des ses classes filles, essayer d'accéder aux attributs des classes filles à partir de la classe mère ne me semble pas correct ...

    Mais peut être que si tu nous disais exactement ce que tu veux en faisant cela, on pourrait te proposer d'autres solutions.

  7. #7
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 317
    Points
    13 317
    Par défaut
    Citation Envoyé par Skalp Voir le message
    Je souhaite rédiger dans ma classe mère Item des propriétés statiques permettant d'accéder à ces attributs, mais correspondant au type de la classe dérivant (exemple : accéder aux attributs de Devise à partir de propriétés statiques définies dans Item).
    Je ne comprends pas bien : les Custom Attributes ont un usage qui n'a pas grand chose à voie avec celui des propriétés/méthodes statiques.

    Pourquoi vouloir mélanger les deux ?

    Je pense que la conception est à revoir, sous réserve que tu nous en dises plus sur ton besoin.

  8. #8
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Points : 2 927
    Points
    2 927
    Par défaut
    Merci de vous être penché sur mon soucis

    Voilà pourquoi je voulais utiliser des propriétés pour récupérer la valeur de mes attributs persos :
    - Je souhaitais en premier lieu profiter de l'héritage pour ne pas avoir à réécrire du code pour chaque classe fille.
    - Je voulais accéder simplement aux attributs personnalisés (c'est-à-dire avec peu de code). Et quoi de plus simple qu'une propriété.
    - Etant donné que mes attributs persos sont des informations de type (et non d'instance), je suis parti vers des propriétés statiques.
    C'est dans ce sens-là que j'ai raisonné.

    Ceci dit, j'ai finalement opté pour des méthodes statiques qui me renvoient un type à partir d'une valeur d'attribut donnée, en utilisant la réflexion. En poursuivant mes développement, j'ai remarqué que c'est tout ce dont j'avais besoin. Je n'ai pas besoin de ces propriétés.

Discussions similaires

  1. Trouver le Type d'une classe template dynamiquement ?
    Par Serge Iovleff dans le forum Langage
    Réponses: 3
    Dernier message: 23/09/2005, 16h48
  2. Réponses: 4
    Dernier message: 28/03/2005, 12h37
  3. Réponses: 11
    Dernier message: 31/01/2005, 17h48
  4. Déterminer le type d'une class dérivée
    Par LDDL dans le forum MFC
    Réponses: 3
    Dernier message: 10/12/2004, 17h36
  5. [Debutant][Collection] Création d'un vecteur de type d'une classe
    Par Tao® dans le forum Collection et Stream
    Réponses: 11
    Dernier message: 22/04/2004, 17h06

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