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

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

Susan Sarandon
Susan Sarandonoriginal
2025-01-17 18:06:09162parcourir

Can Reflection Bypass C#'s Private Readonly Field Restrictions?

Utilisez la réflexion C# pour modifier les champs privés en lecture seule

Le modificateur

private readonly en C# est conçu pour empêcher la modification des champs après le constructeur, mais nous pouvons explorer la possibilité de modification par réflexion.

Problème : Utiliser la réflexion pour modifier les champs privés en lecture seule

Les champs privés en lecture seule peuvent-ils être modifiés à l'aide de la réflexion après l'exécution du constructeur ?

Analyse détaillée

Considérez le code C# 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
// 在此处添加反射代码。
Console.WriteLine(foo.GetBar()); // 输出 456</code>

Solution utilisant la réflexion

La réflexion fournit un moyen d'atteindre cet objectif. Voici comment procéder :

<code class="language-csharp">typeof(Foo).GetField("bar", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(foo, 567);</code>

Ce code utilise la réflexion pour modifier le champ privé en lecture seule "bar" de l'Fooinstance de classefoo. Bien que readonly empêche la modification directe, la réflexion contourne cette limitation. Il convient de noter que cette approche n'est généralement pas recommandée car elle rompt l'encapsulation et peut rendre le code difficile à maintenir et à déboguer.

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