Compte tenu de cette classe
class Foo
{
// Want to find _bar with reflection
[SomeAttribute]
private string _bar;
public string BigBar
{
get { return this._bar; }
}
}
Je veux trouver l'élément privé _bar que je marquerai avec un attribut. Est-ce possible?
J'ai fait cela avec des propriétés où j'ai cherché un attribut, mais jamais un champ membre privé.
Quels sont les indicateurs de liaison que je dois définir pour obtenir les champs privés?
c#
.net
reflection
.net-attributes
David Basarab
la source
la source
Réponses:
Utilisation
BindingFlags.NonPublic
etBindingFlags.Instance
drapeauxla source
Vous pouvez le faire comme avec une propriété:
la source
Obtenez la valeur d'une variable privée à l'aide de Reflection:
Définissez la valeur de la variable privée à l'aide de Reflection:
Où objectForFooClass est une instance non nulle pour le type de classe Foo.
la source
GetInstanceField(typeof(YourClass), instance, "someString") as string
Comment obtenir la valeur d'un champ privé en C #?Une chose que vous devez savoir lorsque vous réfléchissez sur des membres privés est que si votre application s'exécute en confiance moyenne (comme, par exemple, lorsque vous exécutez sur un environnement d'hébergement partagé), elle ne les trouvera pas - le L'option BindingFlags.NonPublic sera simplement ignorée.
la source
la source
Belle syntaxe avec la méthode d'extension
Vous pouvez accéder à n'importe quel champ privé de type arbitraire avec un code comme celui-ci:
Pour cela, vous devez définir une méthode d'extension qui fera le travail pour vous:
la source
J'utilise cette méthode personnellement
la source
Voici quelques méthodes d'extension pour obtenir et définir des champs et propriétés privés simples (propriétés avec setter):
exemple d'utilisation:
Code:
la source
Oui, mais vous devrez définir vos indicateurs de liaison pour rechercher des champs privés (si vous recherchez le membre en dehors de l'instance de classe).
L'indicateur de liaison dont vous aurez besoin est: System.Reflection.BindingFlags.NonPublic
la source
Je suis tombé sur cela en recherchant cela sur google, donc je me rends compte que je suis en train de tomber sur un ancien post. Cependant, GetCustomAttributes nécessite deux paramètres.
Le deuxième paramètre spécifie si vous souhaitez ou non rechercher la hiérarchie d'héritage
la source