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

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

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

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!

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