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

VB.NET Discussion :

GetType d'une classe ou objet quelquonque [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Detection incendie
    Inscrit en
    Avril 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Detection incendie
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 2
    Par défaut GetType d'une classe ou objet quelquonque
    Bonsoir ou bonjour,

    Je viens vers vous pour un problème que je n'arrive pas à régler.
    Tout d'abord je souhaitais vous dire que je suis 'débutant' et que j'aimerai que vous soyez indulgent , et que malgré toutes les recherches effectuées sur le site et via la net , je n'est pas réussi à trouver une solution à mon problème.

    Ma question est : est t 'il possible de récupérer le Type de classe 'Parent' ?
    Par exemple dans un listview ,j'arrive à récupérer toutes les informations de la class 'ListView.ColumnHeaderCollection' avec gettype , mais je souhaiterais connaitre le type de controle qui lui est associé.

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim TypeDeCollection As Type = GetType(ListView.ColumnHeaderCollection)
    En gros , je voudrais savoir quelle type d'objet la collection est faite : ici des columnheaders.

    On peut récupérer les membres, les propriétés et tout un tas de choses mais je n'arrive pas à trouver le type de controle ou de classe 'lié' a cette collection.

    Pour information , en connaissant le type je pourrai facilement recréer une collection ( ici de colonnes) mais ce n'est pas ce que je souhaites car la class peux changer et je n'est pas envie d'avoir à taper un code pour chaque types(je pourrai tès bien faire un getype d'une autre classe).
    En espérant avoir été assez clair..

    Information Complémentaire : il s'agit de pouvoir sérialiser un objet...

    Merci d'avance pour vos réponses.

    Paul

  2. #2
    Membre Expert Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Par défaut
    Bonjour.

    La bonne question à se poser est : quelle information du type de la collection permet d'obtenir le type des éléments. En général la collection implémente IEnumerable<T> et il suffit de récupérer cette déclaration pour lire T.

    Malheureusement ColumnHeaderCollection n'implémente que les interfaces non-génériques, donc la seule façon de procéder, peu désirable, est de regarder ses membres. En l’occurrence les méthodes "Add" acceptent divers types, de String à ColumnHeader, ce qui n'est pas idéal. Les indexeurs en revanche renvoient tous un ColumnHeader.

    Voici en gros comment faire en regardant les indexeurs mais la méthode n'est applicable que si tous tes types ont tous des indexeurs renvoyant tous le type d'élément que tu désires obtenir. Le code n'a pas été testé :

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var collectionType = collection.GetType();
    var indexGetters = collectionType.GetMethods("get_Item", BindingFlags.GetProperty | BindingFlags.Instance | BindingFlags.Public);
    var elementType = indexGetters[0].ReturnType;


    Note qu'il y a eu des changements au niveau de la reflection et je ne suis pas sûr que ce code soit toujours la meilleure approche ou qu'il fonctionne avec le Windows Store. Il me semble qu'il faut désormais passer par GetTypeInfo() mais l'approche reste sensiblement la même.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Detection incendie
    Inscrit en
    Avril 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Detection incendie
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 2
    Par défaut GetType d'une classe ou objet quelquonque
    Bonjour ,

    Merci pour cette réponse rapide.
    Effectivement j'avais déjà regarder en passant par 'GetMethods' , mais n'avait pas fais attention au ReturnType.


    Voilà ce que je fais tout simplement :

    Code Vb.net : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    Dim TypeCollection = GetType(ListView.ColumnHeaderCollection)
    Dim Méthodes = TypeCollection.GetMethods
    Dim TypeElement = Méthodes(0)
    Dim Element = TypeElement.ReturnType

    Je peux ensuite Vérifier que typeElement Retourne bien 'get_item' mais pour l'instant ca me va très bien car le code risque d'évoluer.

    Merci pour l'information en tout cas.
    Bonne continuation.

    Paul

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

Discussions similaires

  1. [Débutant] Comparaison sur une liste contenu dans une classe d'objet
    Par jpbelmondo59 dans le forum C#
    Réponses: 8
    Dernier message: 02/09/2014, 11h45
  2. [eZ Publish] Ajouter une classe à l'objet embed
    Par azrael62 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 02/07/2012, 15h25
  3. [Débutant] Lister les propriétés et méthodes d'une classe/un objet ?
    Par Jean-Philippe André dans le forum VB.NET
    Réponses: 10
    Dernier message: 15/02/2012, 15h20
  4. Réponses: 3
    Dernier message: 24/06/2009, 21h08
  5. [POO] php5 : passer une classe en objet session
    Par dridri dans le forum Langage
    Réponses: 1
    Dernier message: 18/02/2008, 16h19

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