Heim >Backend-Entwicklung >C++ >Kann Reflection die Einschränkungen für private schreibgeschützte Felder in C# umgehen?
Verwenden Sie C#-Reflexion, um private schreibgeschützte Felder zu ändern
Der Modifikatorprivate readonly
in C# soll verhindern, dass Felder nach dem Konstruktor geändert werden. Wir können jedoch die Möglichkeit einer Änderung durch Reflexion untersuchen.
Problem: Verwendung von Reflection zum Ändern privater schreibgeschützter Felder
Können private schreibgeschützte Felder mithilfe von Reflektion geändert werden, nachdem der Konstruktor ausgeführt wurde?
Detaillierte Analyse
Betrachten Sie den folgenden C#-Code:
<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>
Lösung mittels Reflexion
Reflexion bietet einen Weg, dieses Ziel zu erreichen. So geht's:
<code class="language-csharp">typeof(Foo).GetField("bar", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(foo, 567);</code>
Dieser Code verwendet Reflektion, um das private schreibgeschützte Feld „bar“ der Foo
Klasseninstanzfoo
zu ändern. Obwohl readonly
eine direkte Änderung verhindert, wird diese Einschränkung durch die Reflexion umgangen. Es ist zu beachten, dass dieser Ansatz im Allgemeinen nicht empfohlen wird, da er die Kapselung unterbricht und die Wartung und das Debuggen des Codes erschweren kann.
Das obige ist der detaillierte Inhalt vonKann Reflection die Einschränkungen für private schreibgeschützte Felder in C# umgehen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!