Heim > Backend-Entwicklung > C++ > Kann Reflection die privaten schreibgeschützten Felder von C# ändern?

Kann Reflection die privaten schreibgeschützten Felder von C# ändern?

Patricia Arquette
Freigeben: 2025-01-17 18:16:09
Original
680 Leute haben es durchsucht

Can Reflection Modify C#'s Private Readonly Fields?

Verwenden von Reflection zum Ändern privater schreibgeschützter Felder in C#

Reflection in C# bietet leistungsstarke Funktionen, einschließlich der Möglichkeit, sogar private schreibgeschützte Felder zu bearbeiten. Lassen Sie uns untersuchen, ob wir ein privates schreibgeschütztes Feld ändern können, nachdem ein Objekt erstellt wurde.

Betrachten Sie dieses Beispiel:

<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>
Nach dem Login kopieren

Das Feld durch Reflexion verändern

Jetzt verwenden wir Reflektion, um das Feld bar zu ändern:

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

Dieses Code-Snippet greift mithilfe von Reflektion auf das private bar-Feld zu und setzt seinen Wert auf 567.

Das Ergebnis

Nach dieser Reflexionsoperation hat sich der Wert von bar tatsächlich geändert:

<code class="language-csharp">Console.WriteLine(foo.GetBar()); // Outputs 567</code>
Nach dem Login kopieren

Dies zeigt, dass die Reflektion trotz der Deklaration private readonly eine Änderung des Feldwerts nach der Objekterstellung ermöglicht. Obwohl dies möglich ist, gilt es im Allgemeinen als schlechte Praxis und sollte aufgrund möglicher unvorhergesehener Folgen und Wartbarkeitsproblemen vermieden werden, sofern dies nicht unbedingt erforderlich ist.

Das obige ist der detaillierte Inhalt vonKann Reflection die privaten schreibgeschützten Felder von C# ändern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage