Maison >développement back-end >C++ >Comment puis-je utiliser Reflection en C# pour appeler des méthodes privées ?

Comment puis-je utiliser Reflection en C# pour appeler des méthodes privées ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-25 05:32:13843parcourir

How Can I Use Reflection in C# to Invoke Private Methods?

Accès aux méthodes privées avec C# Reflection

En C#, les méthodes privées sont généralement masquées pour des raisons d'encapsulation et de sécurité. Cependant, des situations peuvent survenir dans lesquelles l'appel dynamique de ces méthodes privées au moment de l'exécution devient nécessaire. C'est là que le pouvoir de la réflexion entre en jeu.

Les appels

Standard GetMethod() récupèrent uniquement les méthodes publiques, protégées et internes. Pour accéder aux méthodes privées, vous devez utiliser la version surchargée de GetMethod() et spécifier le bon BindingFlags.

La solution :

La clé est d'utiliser le BindingFlags approprié dans l'appel GetMethod(). Voici comment :

<code class="language-csharp">MethodInfo dynMethod = this.GetType().GetMethod("Draw_" + itemType, 
    BindingFlags.NonPublic | BindingFlags.Instance);
dynMethod.Invoke(this, new object[] { methodParams });</code>

Cet extrait de code récupère la méthode privée (nommée dynamiquement en utilisant "Draw_" itemType) puis l'invoque en utilisant dynMethod.Invoke().

Comprendre les BindingFlags :

L'énumération BindingFlags contrôle quels membres sont inclus dans la recherche. Pour l'appel de méthode privée, BindingFlags.NonPublic et BindingFlags.Instance sont cruciaux :

  • BindingFlags.NonPublic : Ce drapeau inclut les membres non publics (privés et protégés).
  • BindingFlags.Instance : Cet indicateur restreint la recherche aux méthodes d'instance, à l'exclusion des méthodes statiques.

En savoir plus sur BindingFlags :

Pour des informations détaillées sur l'énumération BindingFlags et ses différentes options, reportez-vous à la documentation officielle de Microsoft [insérer l'URL de la documentation ici].

Cette approche permet aux développeurs d'appeler dynamiquement des méthodes privées à partir de la même instance de classe, ouvrant ainsi des possibilités de manipulation avancée des membres de la classe au moment de l'exécution.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn