Salut
est il possible de recuperer dynamiquement la liste des classes d'un projet...
par exemple toutes les classes herites d'un classe A ...
thx @+
Salut
est il possible de recuperer dynamiquement la liste des classes d'un projet...
par exemple toutes les classes herites d'un classe A ...
thx @+
Tout ça est possible en c#, et ça s'appel "reflection"
Voir:
http://msdn2.microsoft.com/fr-fr/lib...83(VS.80).aspx
(trouver en peu de temps sur le net...)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 using System; using System.Reflection; class TestReflexion { public static void Main() { foreach(Assembly asm in AppDomain.CurrentDomain.GetAssemblies() ) { if (asm.GetName().Name != "mscorlib") { foreach (Type ty in asm.GetTypes() ) { Console.WriteLine("Classe : " + ty); foreach (MethodInfo mi in ty.GetMethods() ) { Console.WriteLine(" Méthode : " + mi); foreach (ParameterInfo pi in mi.GetParameters() ) Console.WriteLine(" Paramètre : " + pi.GetType() ); } } } } } }
Merci
Est ce egalement possible de recuperer les membres d'une classe a partir de la classe ??
variableInstanceDeClasse.GetType().GetMembers()Envoyé par Seth77
te retourne tout (et plus).
Tu as de plus des méthodes spécialisées pour les propriétés, les méthodes, les variables membres (GetProperties, GetMethods, GetFields respectivement).
Chacune de ces méthode possède une signature de base (sans param) qui retourne tout, et une avec un paramètre de Binding permettant de restreindre le retour (Public, static, etc ...).
Attention : il semble y avoir quelques bugs avec ce paramètre (par exemple un GetFields avec le BindingFlags.Public ne fonctionne pas sur les fields statiques, pour une raison que j'ignore).
SluEnvoyé par Bluedeep
voila ce que j'essaye :
Et pourtant je ne recupere avec 1 rien et avec 2 juste i1 ....
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 class Class1_member { public int i1; private bool b1; private bool b2; public Class1_member() { i1 = 12; b1 = true; b2 = false; this.GetType().GetFields(BindingFlags.NonPublic); (1) this.GetType().GetFields(); (2) } }
Comment faire pour recuperer i1, b1 et b2 ?
![]()
Salut
Est ce que c'est completement faux ou alors personne ne comprends commme moi ?![]()
Voici un exemple qui fonctionne:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 namespace EssaiGetFields { class Program { static void Main(string[] args) { Test t = new Test(); foreach (FieldInfo fi in t.GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)) { Console.WriteLine(fi.Name); } } } class Test { public int i1 = 0; private bool b1 = false; internal double d1 = 0; protected decimal d2 = 0; } }
Envoyé par NicolasJolet
Merci ..ca marche ... il manquait le "BindingFlags.Instance" pour tout avoir
J'ai un autre probleme ; je passe une classe a une fonction et je verifie les membres en fonction de leurs hierarchies ... pourtant les classes sont bien derive de la classe DB_Access.DB_Field mais il ne rentre jamais dans le if ?![]()
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 foreach (FieldInfo aFieldInfo in this.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance)) { if (aFieldInfo.FieldType.GetType().IsSubclassOf(Type.GetType("DB_Access.DB_Field"))) { int i = 3; } }
Petite erreur : Je recupere la classe "LaClasse" pour prendre toutes les variables et pour ensuite en ressortir celles qui sont derive de DB_Field....mais cela ne marche pas ....
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 foreach (FieldInfo aFieldInfo in LaClasse.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance)) { if (aFieldInfo.FieldType.GetType().IsSubclassOf(Type.GetType("DB_Access.DB_Field"))) { int i = 3; } }![]()
![]()
![]()
![]()
Pourtant dans une fenetre espion je vois bien les bons objets et le fait qu'ils soit derives de DB_Field ....
Dans mes test j'ai meme 2 objets qui en derivent et 1 non ... et aucun ne rentre dans le if
Salut
j'ai reussit ... cela marche un peu mieux avec un typeof ... etrange tout de meme juste avant avec le GetType cela marchait !
Sinon maintenant j'ai un autre probleme ...![]()
![]()
Je n'arrive pas a recuperer a partir de aFieldInfo mon objet de type DB_Access.DB_Field ..... 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 ?
Merci d'avance !
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager