Probleme avec la reflexion

Seth77 Messages postés 572 Date d'inscription mardi 30 avril 2002 Statut Membre Dernière intervention 4 mai 2020 - 16 févr. 2007 à 10:28
Seth77 Messages postés 572 Date d'inscription mardi 30 avril 2002 Statut Membre Dernière intervention 4 mai 2020 - 24 févr. 2007 à 18:53
Salut

Voici mon code

foreach(FieldInfo aFieldInfo in LaClasse.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance))
{
if(aFieldInfo.FieldType.GetType().IsSubclassOf(Type.GetType("myApp.myClass2")))
{
int i = 3;
}
}

J'essaie en recuperant les membre de savoir lequels sont derive de myClass2, pourtant dans la fenetre espion je le vois bien mais aucune fois il ne rentre dans le if ....

thx @+

Herve

28 réponses

sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
16 févr. 2007 à 10:37
Salut,

as-tu essayé en faisant :

foreach(FieldInfo aFieldInfo in LaClasse.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance))
{
   if(aFieldInfo.FieldType.GetType().IsSubclassOf(Type.GetType(typeof(myApp.myClass2))))
   {
      int i = 3;
   }
}

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
16 févr. 2007 à 10:37
ooops... sorry :

foreach(FieldInfo aFieldInfo in LaClasse.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance))
{
   if(aFieldInfo.FieldType.GetType().IsSubclassOf(typeof(myApp.myClass2)))
   {
      int i = 3;
   }
}

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
0
Seth77 Messages postés 572 Date d'inscription mardi 30 avril 2002 Statut Membre Dernière intervention 4 mai 2020 1
16 févr. 2007 à 10:39
Je vais essaye , merci ...

Mais c'est etrange parce que je fais comment cela autre part et ca marche bien

Herve
0
Seth77 Messages postés 572 Date d'inscription mardi 30 avril 2002 Statut Membre Dernière intervention 4 mai 2020 1
19 févr. 2007 à 17:07
J'arrive enfin a recuperer ce que je vx ... mais je n'arrive pas a recuperer mon objet ... cad j'ai mon objet de type ABC et j'aimerais bien le recuperer dans un objet de type ABC ..

j'ai regarder dans la MSDN et je fais pareil ... toujours NULL dans mon
objet, ou alors une Exception a cause de qqchose de static !

comment faire ?

Herve
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Warny Messages postés 473 Date d'inscription mercredi 7 août 2002 Statut Membre Dernière intervention 10 juin 2015
19 févr. 2007 à 17:44
Salut,

J'ai eu un problème similaire au tient.
Si ton objet est dans une assembly externe, quand tu charges ton assembly essaye ça :
Assembly assembly = Assembly.Load(AssemblyName.GetAssemblyName(Path));

Console.Out.WriteLine("Warny")

Il y a 10 types de personnes
Ceux qui comptent en binaire... et les autres
0
Seth77 Messages postés 572 Date d'inscription mardi 30 avril 2002 Statut Membre Dernière intervention 4 mai 2020 1
22 févr. 2007 à 08:45
Merci...

sinon pour vraiment recuperer l'objet , l'on fait comment ?

Herve
0
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
24 févr. 2007 à 11:21
salut,

si tu veux instancier un objet à partir d'un assembly chargé dynamiquement :
Assembly assembly = Assembly.Load(AssemblyName.GetAssemblyName(Path));
object o = assembly.CreateInstance("espace_de_nom.Classe");

normalement, ca renvoie soit une instance, soit une exception...qui peut venir par exemple d'une ouverture d'un fichier introuvable (à cause d'un mauvais dossier courant...)...dans ce cas, regarde l'exception dans InnerException de l'exception lancée...

sinon reprécise...

ShareVB
0
Seth77 Messages postés 572 Date d'inscription mardi 30 avril 2002 Statut Membre Dernière intervention 4 mai 2020 1
24 févr. 2007 à 11:31
je debute en c#

question bete : c'est quoi un assembly ?

ma classe est dans le meme projet ...

Herve
0
Seth77 Messages postés 572 Date d'inscription mardi 30 avril 2002 Statut Membre Dernière intervention 4 mai 2020 1
24 févr. 2007 à 14:13
Si j'ai bien compris L'assembly c'est tout ce qui compose le projet :  le programe et les differentes dependances (dll, etc,...)

Herve
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
24 févr. 2007 à 14:30
Non, un assembly c'est le fichier contenant le code IL issu de la (semi)compilation, le manifest, les ressources, etc etc
Il y en a en gros 2 sortes : processus (exe) et bibliotheque (dll)

/*
coq
MVP Visual C#
CoqBlog
*/
0
Seth77 Messages postés 572 Date d'inscription mardi 30 avril 2002 Statut Membre Dernière intervention 4 mai 2020 1
24 févr. 2007 à 14:35
Ah ok ...donc il s'agit du projet (semi)compile qui donne soit un EXE soit une DLL

merci

Herve
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
24 févr. 2007 à 14:41
Oui, suivant les propriétés définies tu obtiens l'un ou l'autre.
Par contre les dépendances n'en font pas partie.

Jette un oeil à ceci : Contenu d'un assembly

/*
coq
MVP Visual C#
CoqBlog
*/
0
Seth77 Messages postés 572 Date d'inscription mardi 30 avril 2002 Statut Membre Dernière intervention 4 mai 2020 1
24 févr. 2007 à 14:43
Merci...

Donc mon probleme avec la reflexion ne vient pas d'un probleme d'assembly ?
Ma classe est dans le meme projet ...

Herve
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
24 févr. 2007 à 15:03
Désolé je n'avais pas regardé la question d'origine.
Je regarde.

/*
coq
MVP Visual C#
CoqBlog
*/
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
24 févr. 2007 à 15:07
Ha oui mais là ça ne marchera jamais ton test : 
if(aFieldInfo.FieldType.GetType().IsSubclassOf(Type.GetType("myApp.myClass2")))
Pourquoi cet appel ?
Tu veux tester le type du champs, pas le type de la proriété donnant le type du champs
Exemple, si le champs est de type "String" :
aFieldInfo.FieldType donnera une instance de Type décrivant System.String
aFieldInfo.FieldType.GetType() donnera une instance de Type décrivant System.RuntimeType

=> if(aFieldInfo.FieldType.IsSubclassOf(Type.GetType("myApp.myClass2")))

/*
coq
MVP Visual C#
CoqBlog
*/
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
24 févr. 2007 à 15:09
(Faut absolument que je perde cette habitude de mettre un 's' à champ moi -_-)

/*
coq
MVP Visual C#
CoqBlog
*/
0
Seth77 Messages postés 572 Date d'inscription mardi 30 avril 2002 Statut Membre Dernière intervention 4 mai 2020 1
24 févr. 2007 à 15:37
Ahhh ben oui .... logique !!!

que je suis c** !!
lol

Par contre mon prob etait egalement de recuperer, apres le test du type, l'objet dans un objet avec le bon type ....

par exemple :

if(aFieldInfo.FieldType.IsSubclassOf(Type.GetType("myApp.myClass2")))
{
myClass2 test = ?????
}

Herve
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
24 févr. 2007 à 15:41
Avec la méthode FieldInfo.GetValue.

/*
coq
MVP Visual C#
CoqBlog
*/
0
Seth77 Messages postés 572 Date d'inscription mardi 30 avril 2002 Statut Membre Dernière intervention 4 mai 2020 1
24 févr. 2007 à 15:44
Ben justement c'est ce que je fais :

myClass2 amyClass2 = (myClass2)myFields[i].GetValue(this);

Herve
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
24 févr. 2007 à 16:57
A moins que this représente ici l'instance de la classe contenant le champ (ce qui m'étonnerais car dans ce cas tu aurais directement accès au champ privé...), ton code est faux.

FieldInfo.GetValue, méthode
En cas de substitution dans une classe dérivée, retourne la valeur d'un champ pris en charge par un objet donné.
[...]
Paramètres
   obj
      Objet dont la valeur de champ sera retournée.

/*
coq
MVP Visual C#
CoqBlog
*/
0
Rejoignez-nous