Utiliser Reflection pour modifier des champs privés en lecture seule en C#
Reflection en C# offre des fonctionnalités puissantes, notamment la possibilité de manipuler même des champs privés en lecture seule. Examinons si nous pouvons modifier un champ privé en lecture seule après la création d'un objet.
Considérez cet exemple :
<code class="language-csharp">public class Foo { private readonly int bar; public Foo(int num) { bar = num; } public int GetBar() { return bar; } } Foo foo = new Foo(123); Console.WriteLine(foo.GetBar()); // Outputs 123</code>
Modifier le champ avec réflexion
Maintenant, utilisons la réflexion pour modifier le champ bar
:
<code class="language-csharp">typeof(Foo).GetField("bar", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(foo, 567);</code>
Cet extrait de code utilise la réflexion pour accéder au champ privé bar
et définit sa valeur sur 567.
Le résultat
Après cette opération de réflexion, la valeur de bar
a bel et bien changé :
<code class="language-csharp">Console.WriteLine(foo.GetBar()); // Outputs 567</code>
Cela démontre que bien qu'elle soit déclarée private readonly
, la réflexion permet de modifier la valeur du champ après la création de l'objet. Bien que cela soit possible, cela est généralement considéré comme une mauvaise pratique et doit être évité à moins que cela ne soit absolument nécessaire en raison de conséquences imprévues potentielles et de problèmes de maintenabilité.
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!