Comment obtenir une propriété Statique de la Réflexion
Si ce semble assez basique mais je ne peux pas le faire fonctionner. J'ai un Objet, et je suis l'aide de la réflexion pour arriver à ça propriétés publiques. L'une de ces propriétés est statique et j'ai pas de chance d'arriver à elle.
Public Function GetProp(ByRef obj As Object, ByVal propName as String) as PropertyInfo
Return obj.GetType.GetProperty(propName)
End Function
Le code ci-dessus fonctionne très bien pour le Public des propriétés d'une Instance, qui jusqu'à présent est tout ce que j'ai besoin. Soi-disant que je peux utiliser BindingFlags de demander à d'autres types de propriétés (privé, statique), mais je n'arrive pas à trouver la bonne combinaison.
Public Function GetProp(ByRef obj As Object, ByVal propName as String) as PropertyInfo
Return obj.GetType.GetProperty(propName, Reflection.BindingFlags.Static Or Reflection.BindingFlags.Instance Or Reflection.BindingFlags.Public)
End Function
Mais encore, demandant à tous les membres Statiques ne retournent rien. .NET réflecteur peut voir les propriétés statiques très bien, donc clairement il me manque quelque chose ici.
- C'est vraiment, vraiment similaire à ceci: stackoverflow.com/questions/392122/...
- Eh bien, c'est similaire en ce qu'ils utilisent tous les deux BindingFlags. Je suis à la recherche d'une combinaison spécifique de BindingFlags qui va me permettre d'obtenir le Public et les membres, qu'ils soient Statiques ou de l'Instance.
Vous devez vous connecter pour publier un commentaire.
Ou il suffit de regarder ce...
p.GetValue(null);
travaille trop. La deuxièmenull
n'est pas nécessaire.C'est le C#, mais devrait vous donner l'idée:
(vous devez OU Non publiques et la Statique uniquement)
BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy
était la seule chose qui a fonctionné pour moi.Un peu de clarté...
BindingFlags.Instance | BindingFlags.Static
résolu pour moi.Ok, donc pour moi, l'essentiel était d'utiliser l' .FlattenHierarchy BindingFlag. Je ne sais pas vraiment pourquoi j'ai juste ajouté ça sur une intuition et il a commencé à travailler. Donc la dernière solution qui me permet d'obtenir de l'Instance Publique ou Propriétés Statiques est:
Ce sera le retour de toutes les propriétés statiques statiques de la classe de base ou d'un type particulier et probablement l'enfant.
Voulais juste préciser cela pour moi, tout en utilisant la nouvelle API reflection basé sur
TypeInfo
- oùBindingFlags
n'est pas disponible de manière fiable (en fonction du cadre).Dans la "nouvelle" à la réflexion, à obtenir les propriétés statiques pour un type (pas y compris la classe de base(es)) vous avez à faire quelque chose comme:
Accueille en lecture seule ou en écriture seule propriétés (malgré écrivez-être seulement une idée terrible).
La
DeclaredProperties
membre, trop ne fait pas de distinction entre les propriétés avec le public/privé accesseurs - afin de filtrer autour de visibilité, vous devez ensuite effectuer sur la base de la accesseur, vous devez utiliser. E. g - en supposant que l'appel ci-dessus s'affiche, vous pouvez faire:Il y a quelques méthodes de raccourci disponibles - mais en fin de compte, nous allons tous être écrit beaucoup plus de méthodes de vulgarisation autour de la
TypeInfo
méthodes de requête/propriétés dans l'avenir. Aussi, la nouvelle API nous oblige à penser exactement ce que nous considérons comme un "privé" ou "public" de la propriété à partir de maintenant - parce que nous devons filtre à nous-mêmes basées sur des accesseurs.Ci-dessous semble fonctionner pour moi.
Essayer cette C# Réflexion lien.
Remarque je pense que BindingFlags.Instance et BindingFlags.Statique sont exclusifs.