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# 2.0] problème avec IsSubclassOf


Sujet :

C#

  1. #1
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut [C# 2.0] problème avec IsSubclassOf
    Bonjour à tous,

    je charge une dll avec Assembly.LoadFrom(path). Ensuite je parcours les classes définies dans cette dll, et je cherche si l'une d'entre elle dérive de ma classe A (qui est abstraite) en utilisant le test suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (type.IsSubclassOf(typeof(A)))
    {
       ...
    }
    A un moment, lors du debuggage, j'obtiens ceci:
    type : {Name = "pluginclass1" FullName = "Toto.titi.plugin1.pluginclass1"}
    typeof(A) : {Name = "A" FullName = "Toto.titi.Core.A"}
    Et je suis absolument certain que pluginclass1 hérite de A. En fait, pluginclass1 hérite d'une classe abstraite (disons A1) qui hérite de A:
    d'ailleurs, le quickwatch me donne ceci: type.BaseType.BaseType : A

    Pourtant, le test (IsSubclassOf) me renvoie 'false'. Auriez-vous une idée de ce qui cloche?

    note: j'ai mis en gras les différents namespace, car j'ai l'intuition que le problème vient de là. En effet, les deux classes (A et pluginclass1) n'appartiennent pas au même namespace.
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  2. #2
    Membre expérimenté Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Points : 1 379
    Points
    1 379
    Par défaut
    Déjà eu des pb comme ça.
    Du coup j'ai arrêter d'utiliser IsSubClassOf et j'utilise la fonction inverse : IsAssignableFrom, qui marche à tous les coups.
    Pour convertir ton code c'est facile, tu inverses juste l'appelant et l'appelé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // avant
    typeof(ClassA).IsSubClassOf(typeof(ClassB))
    // après
    typeof(ClassB).IsAssignableFrom(typeof(ClassA))

  3. #3
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    merci pour ce conseil, mais malheureusement, il ne résout pas mon problème (j'avais déjà essayé avant de poser la question). Au final, j'ai "résolu" (entre crochets car en réalité je l'ai plutôt contourné) ce problème en faisant ceci (ce qui ne me plait pas du tout, mais je n'ai pas le temps de m'y attarder): je génère l'exécutable et les dlls qu'il utilise dans le même répertoire. Et là ça marche...
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

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

Discussions similaires

  1. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  2. Problème avec [b]struct[/b]
    Par Bouziane Abderraouf dans le forum CORBA
    Réponses: 2
    Dernier message: 17/07/2002, 10h25
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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