Rumah >pembangunan bahagian belakang >C++ >Bolehkah Reflection Bypass Private Readonly Field Immutability dalam C#?

Bolehkah Reflection Bypass Private Readonly Field Immutability dalam C#?

Susan Sarandon
Susan Sarandonasal
2025-01-17 18:04:14872semak imbas

Can Reflection Bypass Private Readonly Field Immutability in C#?

Mengubah suai Medan Baca Sahaja dalam C# Menggunakan Refleksi

Walaupun medan private readonly dalam C# direka untuk mengelakkan pengubahsuaian selepas pemulaan objek, refleksi menyediakan mekanisme untuk memintas sekatan ini. Ini bermakna, walaupun kata kunci readonly, nilai medan ini boleh ditukar selepas pembina selesai.

Mari kita gambarkan ini dengan contoh:

<code class="language-csharp">public class Foo
{
    private readonly int bar;

    public Foo(int num)
    {
        bar = num;
    }

    public int GetBar()
    {
        return bar;
    }
}</code>

Di sini, Foo mengandungi private readonly int bar. Kita boleh mengubah suai bar menggunakan refleksi:

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

Coretan kod ini menggunakan pantulan untuk mengakses medan bar peribadi dan menetapkan nilainya kepada 567. Ini menunjukkan bahawa pengubah suai readonly, bersama-sama dengan akses private, tidak menjamin kebolehubahan mutlak apabila pantulan digunakan . Adalah penting untuk memahami tingkah laku ini untuk mengelakkan isu yang tidak dijangka dan mengekalkan integriti kod.

Atas ialah kandungan terperinci Bolehkah Reflection Bypass Private Readonly Field Immutability dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn