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
Libérer: 2025-01-17 18:16:09
original
629 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal