Maison >développement back-end >C++ >Reflection peut-il modifier les champs privés en lecture seule de C# ?

Reflection peut-il modifier les champs privés en lecture seule de C# ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-17 18:16:09631parcourir

Can Reflection Modify C#'s Private Readonly Fields?

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!

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