2010-07-07 4 views
3

Supposons que j'ai une classe nommée foo, et qu'elle a 3 membres publics foo1, foo2 et foo3. Supposons maintenant que j'écris une fonction qui prend comme paramètre une instance de classe foo, mais lorsque j'écris cette fonction, je n'ai aucune idée de ce que les membres publics ont.en C#, Y at-il de toute façon pour déterminer les membres d'une classe à l'exécution?

Y at-il un moyen pour moi de déterminer au moment de l'exécution qu'il a des membres publics foo1, foo2, foo3 ET SEULEMENT foo1, foo2, foo3. IE - savoir ce que tous les membres du public sont?

Et puis-je également déterminer leurs types?

Répondre

3

Vous pouvez utiliser la réflexion:

// List all public properties for the given type 
PropertyInfo[] properties = foo.GetType().GetProperties(); 
foreach (var property in properties) 
{ 
    string propertyName = property.Name; 
} 

Vous devez savoir qu'il pourrait y avoir une charge supplémentaire lors de l'utilisation de réflexion car les types sont évalués lors de l'exécution.

6

Eh bien, voilà ce que la réflexion est là pour:

Type myObjectType = typeof(foo); 

System.Reflection.FieldInfo[] fieldInfo = myObjectType.GetFields(); 
foreach (System.Reflection.FieldInfo info in fieldInfo) 
    Console.WriteLine(info.Name); // or whatever you desire to do with it 
2

C'est un travail de réflexion. Regardez dans des méthodes telles que:

myFoo.GetType().GetMethods(BindingFlags.Instance | BindingFlags.Public);

Ceci renverra toutes les méthodes d'instance publiques que le type a. Vous pouvez ensuite parcourir les résultats renvoyés et déterminer si cette classe répond à vos critères. Il existe des méthodes équivalentes et pour d'autres types de membres, tels que GetFields(...), GetProperties(...), etc.

Fondamentalement, vous voulez apprendre à connaître la classe Type, qui est au cœur des capacités de réflexion de C#.

0
foreach(PropertyInfo pi in yourObject.GetType().GetProperties()) 
{ 
    Type theType = pi.PropertyType; 
} 
Questions connexes