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 :

[2.0] Peut-on identifier le type d'une instance qui appelle une méthode ?


Sujet :

Framework .NET

  1. #1
    Membre expérimenté
    Avatar de FRED.G
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 032
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 032
    Points : 1 505
    Points
    1 505
    Par défaut [2.0] Peut-on identifier le type d'une instance qui appelle une méthode ?
    Hello !

    Je voudrais savoir s'il est possible d'identifer dans le corps d'une méthode d'une classe, le type de l'instance qui a appellé la méthode en question.

    Par exemple : j'ai une classe perso CustomItem qui implémente IEditableObject.

    Si ce CustomItem est lié via un BindingSource, le BindingSource appelera automatiquement, par exemple, la méthode CustomItem.EndEdit.

    J'aimerais pouvoir exécuter un code différent dans CustomItem.EndEdit selon que cette méthode aura été appelée par un Objet BindingSource, ou telle autre Objet implémentant une interface donnée, etc.


    Je précise que je ne peux pas définir dans mes méthodes de paramètres personnaliés (par exemple un ByRef Sender as Object) car les méthodes dont je parle sont signées par des interfaces auxquelles je ne peux toucher (comme dans mon exemple avec IEditableObject)

    Est-ce possible ?
    (\ _ /)
    (='.'=)
    (")-(")

  2. #2
    Membre expérimenté
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Points : 1 566
    Points
    1 566
    Par défaut
    C'est possible de remonter les niveaux des appels de méthodes en faisant comme ca :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int nivo =1;
    StackTrace st = new StackTrace();
    StackFrame sf = st.GetFrame(nivo);
    System.Diagnostics.Debug.WriteLine(sf.GetMethod().ToString());

    Si tu peut reconnaitre le type de l'objet a partir du nom de la méthode, dans ce cas ton probleme est resolu, sinon cherche encore dans les classes StackFrame et StackTrace peut etre que c'est possible de retrouver le type de l'applant.
    Mehdi Feki : Modérateur .Net

  3. #3
    Membre expérimenté
    Avatar de FRED.G
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 032
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 032
    Points : 1 505
    Points
    1 505
    Par défaut
    Ok, merci pour ta réponse, c'est très intéressant !

    Je vais découvrir un peu ces classes StackFrame et StackTrace.
    Sinon, au pire, il ne me restera plus qu'à modifier le code source de la classe appelant la méthode de manière à agir "en amont".

    Dans mon cas je voulais éviter ça pour ne pas avoir à toucher à la classe BindingSource du framework.
    Mais je le ferais peut-être finalement car ça me parait plus propre et surtout moins compliqué avec les add-ins de Reflector.
    (\ _ /)
    (='.'=)
    (")-(")

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

Discussions similaires

  1. Ecrire une fonction qui renvoie une structure de données (type)
    Par dinosaure dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 15/09/2008, 21h59
  2. Identifier le type d'une classe
    Par oodini dans le forum C++
    Réponses: 4
    Dernier message: 20/02/2007, 16h25
  3. quelqu'un peut m'expliquer ce "Type"
    Par bassim dans le forum Langage
    Réponses: 9
    Dernier message: 21/01/2007, 16h08
  4. Réponses: 12
    Dernier message: 23/09/2006, 13h12
  5. Réponses: 10
    Dernier message: 27/04/2005, 12h26

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