Utilisez la réflexion C# pour modifier les champs privés en lecture seule
La technologie Reflection en C# est puissante, permettant l'accès et la manipulation des informations d'exécution sur les types, les méthodes, les propriétés et les champs. Une question courante est la suivante : les champs privés en lecture seule peuvent-ils être modifiés une fois l'objet construit ?
Considérez le scénario suivant :
<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()); // 输出 123</code>
Ici, le champ bar
est déclaré comme private readonly
, ce qui signifie qu'il ne peut être attribué que dans le constructeur. Pour modifier sa valeur ultérieurement, vous devez utiliser la réflexion.
Grâce à la réflexion, nous pouvons accéder aux champs privés en spécifiant le nom du champ et l'indicateur de liaison. Voici comment procéder :
<code class="language-csharp">typeof(Foo).GetField("bar", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(foo, 456);</code>
L'instruction ci-dessus utilise la méthode GetField
pour obtenir le champ bar
, puis utilise la méthode SetValue
pour changer sa valeur en 456.
Après avoir exécuté le code de réflexion, l'appel de foo.GetBar()
affichera 456, prouvant que le champ privé en lecture seule a été modifié avec succès au moment de l'exécution. Cependant, il est important de noter que la modification des champs en lecture seule de cette manière n'est pas recommandée pour le code de production car cela pourrait provoquer un comportement inattendu ou des erreurs d'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!