Maison >développement back-end >C++ >Reflection peut-il contourner les restrictions de champs privés en lecture seule de C# ?
Utilisez la réflexion C# pour modifier les champs privés en lecture seule
Le modificateurprivate 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'Foo
instance 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!