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 appelsStandard 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 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()
.
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.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!